今天需要實現一個需求,就是當App對用戶不可見時,停止App的某些功能。那麼該如何監聽App是否處於前臺呢?哈哈哈!非常簡單,只需要用接口 Application.ActivityLifecycleCallbacks 就能實現該功能。
只需要兩步,就能實現前後臺監聽:
一、實現接口 ActivityLifecycleCallbacks
基本思路:自定義一個類並實現ActivityLifecycleCallbacks
接口,其中重點關注接口的onActivityResumed
和onActivityStopped
方法。
自己設置一個標記位foregroundActivityCount
,當調用onActivityResumed
方法時,foregroundActivityCount加1,當調用onActivityStopped
方法時,foregroundActivityCount減1。那麼當foregroundActivityCount大於0時,App肯定就處於前臺,當其值等於0時,App就處於後臺。
代碼如下:
public class AppLifecycleManager implements Application.ActivityLifecycleCallbacks {
private int foregroundActivityCount = 0;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivityResumed(Activity activity) {
foregroundActivityCount++;
doSomething();
}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {
foregroundActivityCount--;
doSomething();
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
//當foregroundActivityCount<=0時可以斷定app處於非前臺狀態
//對應前後臺狀態進行相應的操作
private void doSomething(){
if(foregroundActivityCount > 0){
//App處於前臺時的操作
}else {
//App處於後臺時的操作
}
}
}
二、使用該實現
很簡單,只要在App的Application
> onCreate
方法中調用方法 registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback)
註冊Activity的生命週期回調就行了。
如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
...
//
registerActivityLifecycleCallbacks(new AppLifecycleManager());
}
... ...
}
是不是特簡單。 參考 How can I tell if Android app is running in the foreground?