
方法一:使用ActivityLifecycleCallbacks
android 在從sdk14 開始為我們提供了一個(gè)新的api 用于檢測(cè)app 中activity 的生命周期,我們可以直接使用。
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}
根據(jù) Activity 的生命周期,知道onStart() 一般表示一個(gè)Activity 處于前臺(tái),onStop() 一般表示Activity在后臺(tái)不可見。所以我們?cè)O(shè)置一個(gè)int refCount 變量, onActivityStarted 的時(shí)候refCount++, onActivityStopped的時(shí)候refCount--。當(dāng)onActivityStopped之后如果refCount == 0 了。那么表示我們的app里面沒有處于onStart的Activity 了,
也就相當(dāng)于 app 已經(jīng)處于后臺(tái)了。
class ActivityLifecycleListener implements ActivityLifecycleCallbacks{
private int refCount = 0;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
refCount++;
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
refCount--;
if(refCount == 0){
setAppGoBackGround(true);
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
然后在app 里面的 Application onCreate()方法注冊(cè)即可:
registerActivityLifecycleCallbacks(new ActivityLifecycleListener());
方法二:
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
/*
BACKGROUND=400 EMPTY=500 FOREGROUND=100
GONE=1000 PERCEPTIBLE=130 SERVICE=300 ISIBLE=200
*/
Log.i(context.getPackageName(), "此appimportace ="
+ appProcess.importance
+ ",context.getClass().getName()="
+ context.getClass().getName());
if (appProcess.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
Log.i(context.getPackageName(), "處于后臺(tái)"
+ appProcess.processName);
return true;
} else {
Log.i(context.getPackageName(), "處于前臺(tái)"
+ appProcess.processName);
return false;
}
}
}
return false;
}