ActivityLifecycleCallbacks是什麼?
- Application通過此接口提供了一套回調方法,用于讓開發者對Activity的生命周期事件進行集中處理。
為什麼用ActivityLifecycleCallbacks?
- 以往若需監測Activity的生命周期事件代碼,你可能是這樣做的,重寫每一個Acivity的onResume(),然後作統計和處理: [java] view plain copy
- @Override
- protected void onResume() {
- super.onResume();
- //TODO 處理和統計代碼
- Log.v(TAG, "onResume");
- Logger.v(TAG, "onResume");
- Logging.v(TAG, "onResume");
- ...
- }
- ActivityLifecycleCallbacks接口回調可以簡化這一繁瑣過程,在一個類中作統一處理
ActivityLifecycleCallbacks怎麼用?
- android.app.Application.ActivityLifecycleCallbacks
- 要求API 14+ (Android 4.0+)
- 繼承Application [java] view plain copy
- public class BaseApplication extends Application
- 在AndroidManifest裡起用自定義Application [html] view plain copy
- <application android:name=".global.BaseApplication"
-
重寫Application的onCreate()方法,或在Application的無參構造方法内,調用Application.registerActivityLifecycleCallbacks()方法,并實作ActivityLifecycleCallbacks接口
[java] view plain copy
- public void onCreate() {
- super.onCreate();
- this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
- @Override
- public void onActivityStopped(Activity activity) {
- Logger.v(activity, "onActivityStopped");
- }
- @Override
- public void onActivityStarted(Activity activity) {
- Logger.v(activity, "onActivityStarted");
- }
- @Override
- public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
- Logger.v(activity, "onActivitySaveInstanceState");
- }
- @Override
- public void onActivityResumed(Activity activity) {
- Logger.v(activity, "onActivityResumed");
- }
- @Override
- public void onActivityPaused(Activity activity) {
- Logger.v(activity, "onActivityPaused");
- }
- @Override
- public void onActivityDestroyed(Activity activity) {
- Logger.v(activity, "onActivityDestroyed");
- }
- @Override
- public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
- Logger.v(activity, "onActivityCreated");
- }
- });
- };
-
運作結果(Logcat日志)
[plain] view plain copy
- 10-21 14:32:57.722: V/WelcomeActivity(8085): onActivityCreated
- 10-21 14:32:57.762: V/WelcomeActivity(8085): onActivityStarted
- 10-21 14:32:57.762: V/WelcomeActivity(8085): onActivityResumed
- 10-21 14:32:59.164: V/WelcomeActivity(8085): onActivityPaused
- 10-21 14:32:59.194: V/MainActivity(8085): onActivityCreated
- 10-21 14:32:59.224: V/MainActivity(8085): onActivityStarted
- 10-21 14:32:59.224: V/MainActivity(8085): onActivityResumed
- 10-21 14:32:59.735: V/WelcomeActivity(8085): onActivityStopped
- 10-21 14:32:59.735: V/WelcomeActivity(8085): onActivityDestroyed
- 10-21 14:33:06.502: V/MainActivity(8085): onActivityPaused
- 10-21 14:33:06.612: V/MainActivity(8085): onActivityStopped
- 10-21 14:33:06.612: V/MainActivity(8085): onActivityDestroyed
ActivityLifecycleCallbacks的拓展用法
- 本次初探僅嘗試使用Log日志工具作簡要測試,如需滿足較複雜的統計或調試需求時,此法可能會大大減少插入代碼量,提高效率
- API僅在14+版本上提供此接口回調,Android 4.0以下系統如何使用?
- API僅針對上述幾個Activity的生命周期事件留出了接口回調,可能已無法滿足日益過渡為使用Fragment的今日需求, 如何在更大範圍内應用LifecycleCallbacks?