1. 程式人生 > >在Activity類之外監聽Activity的生命週期

在Activity類之外監聽Activity的生命週期

我們都知道Activity的生命週期有幾個非常常用的函式如oncreate,onresume,onpause,ondestroy,通常會在裡面做一些初始化或者資源釋放的操作。

如果在當前Activity類裡做生命週期對應的操作的話,很方便。但是有一些我們封裝好的通用的veiw,只傳遞進去了一個context進去。如果這個view需要在當前附著的activity的生命週期某個特定階段去做一些事情的話,就會很尷尬。

一個思路是在這個view中,定義同樣的生命週期函式,在引用view的activity的生命週期函式中對應的呼叫。但是這樣顯然太麻煩,改動量會很大。

無意中發現了一個簡單方法:Application.registerActivityLifecycleCallbacks
它是統計監聽整個APP中所有activity生命週期,我們可以在回撥處獲取到目標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);
}

使用案例:

(mActivity.getApplication()).registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            }

            @Override
            public void onActivityStarted
(Activity activity) { } @Override public void onActivityResumed(Activity activity) { //此處判斷publiserBar附著的activity是否onresume if (mActivity != null && mActivity == activity) { do your Bussiness ... } } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }); }

如果只想監聽當前view附著activity切換到前臺,還有一個方法
在當前view類中隨便拎一個mView出來

mView.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {
            @Override
            public void onWindowFocusChanged(boolean hasFocus) {

            }
        });

hasFocus為true和false有點類似於Activity的onResume和onPause函式