zoukankan      html  css  js  c++  java
  • Android -- ActivityLifeCycleCallbacks

    ActivityLifeCycleCallbacks

    Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理。

    为什么用ActivityLifecycleCallbacks

    以往若需监测Activity的生命周期事件代码,你可能是这样做的,重写每一个Acivity的onResume(),然后作统计和处理:

    @Override  
    protected void onResume() {  
      super.onResume();  
      //TODO 处理和统计代码  
      Log.v(TAG, "onResume");  
      Logger.v(TAG, "onResume");  
      Logging.v(TAG, "onResume");  
      //...  
    }  
    

    ActivityLifecycleCallbacks接口回调可以简化这一繁琐过程,在一个类中作统一处理。

    ActivityLifecycleCallbacks怎么用?

    在自定义的Application中的onCreate()方法,或在Application的无参构造方法内,调用Application.registerActivityLifecycleCallbacks()方法,并实现ActivityLifecycleCallbacks接口:

    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");  
        }  
      });  
    };  
    

    Log:

    V/OneActivity: onActivityCreated  
    V/OneActivity: onActivityStarted  
    V/OneActivity: onActivityResumed  
    V/OneActivity: onActivityPaused  
    V/MainActivity: onActivityCreated  
    V/MainActivity: onActivityStarted  
    V/MainActivity: onActivityResumed  
    V/OneActivity: onActivityStopped  
    V/OneActivity: onActivityDestroyed  
    V/MainActivity: onActivityPaused  
    V/MainActivity: onActivityStopped  
    V/MainActivity: onActivityDestroyed
    

    注意

    ActivityLifeCycleCallbacks在API>=14上才可以调用。

    兼容API<14

    • 自己写一个ActivityLifeCycleCallbacks接口:
    public interface ActivityLifecycleCallbacks{
     public void onActivityStopped(Activity activity);
     public void onActivityStarted(Activity activity);
     public void onActivitySaveInstanceState(Activity activity, Bundle outState);
     public void onActivityResumed(Activity activity);
     public void onActivityPaused(Activity activity);
     public void onActivityDestroyed(Activity activity);
     public void onActivityCreated(Activity activity, Bundle savedInstanceState);
    }
    
    • 在Application中实现接口:
    public class MyApplication extends Application implements my.package.ActivityLifecycleCallbacks{
     @Override
     public void onCreate() {
      super.onCreate();   
     }
     @Override
     public void onActivityStopped(Activity activity) {
      Log.i("Tracking Activity Stopped", activity.getLocalClassName());
     }
     @Override
     public void onActivityStarted(Activity activity) {
      Log.i("Tracking Activity Started", activity.getLocalClassName());
     }
     @Override
     public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
      Log.i("Tracking Activity SaveInstanceState", activity.getLocalClassName());
     }
     @Override
     public void onActivityResumed(Activity activity) {
      Log.i("Tracking Activity Resumed", activity.getLocalClassName());
     }
     @Override
     public void onActivityPaused(Activity activity) {
      Log.i("Tracking Activity Paused", activity.getLocalClassName());
     }
     @Override
     public void onActivityDestroyed(Activity activity) {
      Log.i("Tracking Activity Destroyed", activity.getLocalClassName());
     }
     @Override
     public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
      Log.i("Tracking Activity Created", activity.getLocalClassName());
     }
    }
    
    • 写基类:
    public class BaseActivity extends Activity {
     protected MyApplication nMyApplication;
     protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      nMyApplication = (MyApplication) getApplication();
      nMyApplication.onActivityCreated(this, savedInstanceState);
     }
     protected void onResume() {
      // TODO Auto-generated method stub
      nMyApplication.onActivityResumed(this);
      super.onResume();
     }
     @Override
     protected void onPause() {
      // TODO Auto-generated method stub
      nMyApplication.onActivityPaused(this);
      super.onPause();
     }
     @Override
     protected void onDestroy() {
      // TODO Auto-generated method stub
      nMyApplication.onActivityDestroyed(this);
      super.onDestroy();
     }
     @Override
     protected void onStart() {
      nMyApplication.onActivityStarted(this);
      super.onStart();
     }
     @Override
     protected void onStop() {
      nMyApplication.onActivityStopped(this);
      super.onStop();
     }
     @Override
     protected void onSaveInstanceState(Bundle outState) {
      nMyApplication.onActivitySaveInstanceState(this, outState);
      super.onSaveInstanceState(outState);
     } 
    }
    
    • 所有的类集成这个基类:
    public class MainActivity extends BaseActivity{
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
     }
    }
    

    我是天王盖地虎的分割线

  • 相关阅读:
    PowerDesigner导出SQL脚本
    【Android进阶学习】shape和selector的结合使用(转)
    国内最新安卓渠道列表42个(转)
    安卓新框架
    通知和消息有什么区别?(转)
    XSS之xssprotect(转)
    为你的Android App实现自签名的 SSL 证书(转)
    HTTPS和HTTP的区别(转)
    IT软件技术人员的职位路线(从程序员到技术总监)
    听大神说:https和http有何区别?(转)
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4945990.html
Copyright © 2011-2022 走看看