在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函式