Android 中 ActivityLifecycleCallbacks的实例详解

          以上就是使用ActivityLifecycleCallbacks的实例,代码注释写的很清楚大家可以参考下,

MyApplication如下:

package com.cc;  import java.util.LinkedList;  import android.app.Activity; import android.app.Application; import android.os.Bundle; /**  * Demo示例:  * ActivityLifecycleCallbacks使用示例  *  * ActivityLifecycleCallbacks用于对应用中Activity的生命周期的追踪和回调  *  * 使用ActivityLifecycleCallbacks可实现:  * 1 判断App是否在后台运行  * 2 关闭该应用所有Activity  *  *  * (1)判断App是否在后台运行  * 在该实现中采用activityCounter记录Activity的个数.  * 通过对于activityCounter是否为0判断当前APP是否在前台运行.  *  * 从ActivityLifecycleCallbacks的实现方法中我们的惯性思维是:  * 在ActivityLifecycleCallbacks的onActivityResumed()中activityCounter+1.  * 在onActivityPaused()中activityCounter-1,  * 但是这么对么?  *  * 先看一下界面跳转时两个Activity的生命周期  * 当从Activity A跳转到Activity B时,两个Activity的生命周期如下:  * A.onPause()->B.onCreate()->B.onStart()-> B.onResume()-> A.onStop()  *  * 假若按照上述方式那么:  * 在A启动后activityCounter=1;  * 当从A跳转到B时在调用A.onPause()时执行:activityCounter-1=0;  * 即该APP运行在后台.  * 这当然是错的,两个界面切换的过程中APP当然是运行在前台的。  *  * 如下修改:  * 在onActivityStarted()中对于activityCounter+1  * 在onActivityStopped()中对于activityCounter-1  * 小结:注意Activity跳转时的生命周期  *  * (2)关闭该应用所有Activity  *  2.1 利用LinkedList管理应用中的界面  *  2.2 在ActivityLifecycleCallbacks的onActivityCreated()  *    将Activity添加到LinkedList中  *    在ActivityLifecycleCallbacks的onActivityDestroyed()  *    将Activity从LinkedList中移除  *  2.3 关闭应用时销毁LinkedList中所有Activity  *  * 备注说明:  * 1 ActivityLifecycleCallbacks是在API 14及其以上才有的  * 2 在Android4.0以下可以在BaseActivity中按照该思路实现  *  */ public class MyApplication extends Application {   private static int activityCounter=0;   private static MyApplication mApplicationInstance;   private static LinkedList mActivityLinkedList;   private ActivityLifecycleCallbacksImpl mActivityLifecycleCallbacksImpl;   @Override   public void onCreate() {     super.onCreate();     mApplicationInstance=new MyApplication();     mActivityLinkedList=new LinkedList();     mActivityLifecycleCallbacksImpl=new ActivityLifecycleCallbacksImpl();     this.registerActivityLifecycleCallbacks(mActivityLifecycleCallbacksImpl);   }      public static MyApplication getInstance() {     if (null==mApplicationInstance) {       mApplicationInstance=new MyApplication();     }     return mApplicationInstance;   }      //判断App是否在后台运行   public boolean isAppRunningBackground(){     boolean flag=false;     if(activityCounter==0){       flag=true;     }     return flag;   }      //退出应用   public void finishAllActivity(){     //unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacksImpl);     System.out.println("--> mActivityLinkedList.size()="+mActivityLinkedList.size());     if(null!=mActivityLinkedList){       for(Activity activity:mActivityLinkedList){         if(null!=activity){           activity.finish();         }       }     }   }         private class ActivityLifecycleCallbacksImpl implements ActivityLifecycleCallbacks{     @Override     public void onActivityCreated(Activity activity, Bundle savedInstanceState) {       System.out.println("onActivityCreated --> "+activity.getClass().getName());       if (null!=mActivityLinkedList&&null!=activity) {         mActivityLinkedList.addFirst(activity);       }     }      @Override     public void onActivityStarted(Activity activity) {       activityCounter++;       System.out.println("onActivityStarted --> "+activity.getClass().getName()+",activityCounter="+activityCounter);     }      @Override     public void onActivityResumed(Activity activity) {       System.out.println("onActivityResumed --> "+activity.getClass().getName());     }      @Override     public void onActivityPaused(Activity activity) {       System.out.println("onActivityPaused --> "+activity.getClass().getName());     }      @Override     public void onActivityStopped(Activity activity) {       activityCounter--;       System.out.println("onActivityStopped --> "+activity.getClass().getName()+",activityCounter="+activityCounter);     }      @Override     public void onActivitySaveInstanceState(Activity activity, Bundle outState) {       System.out.println("onActivitySaveInstanceState --> "+activity.getClass().getName());     }      @Override     public void onActivityDestroyed(Activity activity) {       System.out.println("onActivityDestroyed --> "+activity.getClass().getName());       if (null!=mActivityLinkedList&&null!=activity) {         if (mActivityLinkedList.contains(activity)) {           mActivityLinkedList.remove(activity);         }       }     }        }  } 

FirstActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FirstActivity extends Activity {    private Context mContext;    private Button mOpenNewActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.first_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mOpenNewActivityButton=(Button) findViewById(R.id.openNewActivityButton);     mOpenNewActivityButton.setOnClickListener(mClickListenerImpl);     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.openNewActivityButton:         Intent intent=new Intent(mContext, SecondActivity.class);         startActivity(intent);         break;       case R.id.finishThisActivityButton:         finish();         break;        default:         break;       }      }    }      @Override   protected void onResume() {     super.onResume();     //System.out.println(" first Activity onResume --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onStop() {     super.onStop();     //System.out.println(" first Activity onStop --> "+MyApplication.getInstance().isAppRunningBackground());   }       } 

SecondActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;  public class SecondActivity extends Activity {    private Context mContext;    private Button mOpenNewActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.second_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mOpenNewActivityButton=(Button) findViewById(R.id.openNewActivityButton);     mOpenNewActivityButton.setOnClickListener(mClickListenerImpl);     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.openNewActivityButton:         Intent intent=new Intent(mContext, ThirdActivity.class);         startActivity(intent);         break;        case R.id.finishThisActivityButton:         finish();         break;        default:         break;       }      }    }     } 

ThirdActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;  public class ThirdActivity extends Activity {    private Context mContext;    private Button mFinishAllActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.third_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);     mFinishAllActivityButton=(Button) findViewById(R.id.finishAllActivityButton);     mFinishAllActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.finishThisActivityButton:         finish();         break;       case R.id.finishAllActivityButton:         MyApplication.getInstance().finishAllActivity();         break;       default:         break;       }      }   }      @Override   protected void onResume() {     super.onResume();     //System.out.println(" third Activity onResume --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onStop() {     super.onStop();     //System.out.println(" third Activity onStop --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onDestroy() {     super.onDestroy();     //System.out.println(" third Activity onDestroy --> "+MyApplication.getInstance().isAppRunningBackground());   }     } 

first_activity.xml如下:

    

second_activity.xml如下:

    

third_activity.xml如下:

        

AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>                                                                         

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多相关文章

  1. [Android]判断当前界面是否是桌面
  2. Android开发入门之Activity生命周期
  3. Android studio跳转界面
  4. Android:程序跳过登录界面直接进入主界面(自动登录)
  5. Android中Fragment生命周期
  6. 【Android】首次进入应用时加载引导界面
  7. Android 利用AudioManager控制后台音乐播放器暂停,播放
  8. Android社交系统----界面预览
  9. Android 实现 Activity后台运行

随机推荐

  1. 解决Android中No resource found that ma
  2. Android(安卓)EditText 多行,滚动条 等
  3. Android(安卓)UI布局中设置了fill_parene
  4. android 接听和挂断实现方式
  5. Android提示版本更新的实现
  6. Android(安卓)Recovery模式
  7. Android平台常见属性集合
  8. Android(安卓)SDK Manager更新不了的解决
  9. Android(安卓)中RelativeLayout各个属性
  10. 没事抽空学——常用界面组件属性