監聽App是否處於前臺

今天需要實現一個需求,就是當App對用戶不可見時,停止App的某些功能。那麼該如何監聽App是否處於前臺呢?哈哈哈!非常簡單,只需要用接口 Application.ActivityLifecycleCallbacks 就能實現該功能。

只需要兩步,就能實現前後臺監聽:

一、實現接口 ActivityLifecycleCallbacks

基本思路:自定義一個類並實現ActivityLifecycleCallbacks接口,其中重點關注接口的onActivityResumedonActivityStopped方法。
自己設置一個標記位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?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章