目標
之前使用全局廣播 + BaseActivity + Activity棧中位置判斷 實現全局數據接收、全局彈框。實在是有點兒low,後面請教高人,發現一個十分簡單的方式對所有的Activity的生命週期進行監聽追蹤,既節約了性能,也提升了B格。
ActivityLifecycleCallbacks簡介
每個Activity生命週期的執行都會被此接口監聽,可以通過註冊此接口實現Activity生命週期的監聽。
Application中接口源碼:
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);
}
實現
1.接口實現類AppActivityLifecycleTracker中進行具體的操作:
/**
* Activity生命週期追蹤
*
* @author fengzhen
* @version v1.0, 2017/7/13
*/
public class AppActivityLifecycleTracker implements Application.ActivityLifecycleCallbacks{
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
// 當acitivity啓動,註冊廣播,進行監聽
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
// 當activity停止,銷燬廣播,後臺不進行廣播監聽
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
2.在繼承自Application的BaseApplication的onCreate()方法中進行註冊該tracer
@Override
public void onCreate() {
// 註冊生命週期追蹤
registerActivityLifecycleCallbacks(new AppLifecycleTracker());
}
如此,便更加簡單、高效、靈活的實現的對app中所有acitivity生命週期的追蹤。