ActivityLifecycleCallbacks 是 Application 中的一个内部接口:
private void backprogress(){ registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle bundle) { } @Override public void onActivityStarted(Activity activity) { Log.v("viclee", activity + "onActivityStarted"); // if (appCount == 0) { // Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到前台 lifecycle"); // Intent intent = new Intent(); // intent.setAction("zhangzksmart"); // // intent.putExtra("moel", "foreground"); // Log.e("viclee","---111-------"); // sendBroadcast(intent); // } appCount++; Log.e("ciclee","niha"+activity+"onActivityStopped"+"=======22======"+appCount); } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { Log.v("viclee", activity + "onActivityStopped"); appCount--; Log.e("ciclee","niha"+activity+"onActivityStopped"+"============="+appCount); // if (appCount == 0) { // Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到后台 lifecycle"); // Intent intent = new Intent(); // intent.setAction("zhangzksmart"); // // intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); // intent.putExtra("moel", "background"); // Log.e("viclee","------2-2-----"); // sendBroadcast(intent); // } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { } @Override public void onActivityDestroyed(Activity activity) { } }); } public int getAppCount() { return appCount; } public void setAppCount(int appCount) { this.appCount = appCount; }然后在定义一个工具类
/** * 自动根据参数选择判断前后台的方法 * * @param context 上下文参数 * @param packageName 需要检查是否位于栈顶的App的包名 * @return */ public static boolean isForeground(Context context,String packageName) { return getApplicationValue((Zksmart) ((Service) context).getApplication()); } /** * 方法3:通过ActivityLifecycleCallbacks来批量统计Activity的生命周期,来做判断,此方法在API 14以上均有效,但是需要在Application中注册此回调接口 * 必须: * 1. 自定义Application并且注册ActivityLifecycleCallbacks接口 * 2. AndroidManifest.xml中更改默认的Application为自定义 * 3. 当Application因为内存不足而被Kill掉时,这个方法仍然能正常使用。虽然全局变量的值会因此丢失,但是再次进入App时候会重新统计一次的 * @param zksmart * @return */ public static boolean getApplicationValue(Zksmart zksmart) { return zksmart.getAppCount() > 0; }
Application 提供有一个 registerActivityLifecycleCallbacks() 的方法,需要传入的参数就是这个 ActivityLifecycleCallbacks 接口,系统会在每个 Activity 执行完对应的生命周期后都调用这个实现类中对应的方法,请记住是每个!
这个时候我们就会想到一个需求实现,关闭所有 Activity !你还在通过继承 BaseActivity 在 BaseActivity 的 onCreate 中将这个 Activity 加入集合???
那我现在就告诉你这样的弊端,如果你 App 中打开有其他三方库的 Activity ,这个三方库肯定不可能继承你的 BaseActivity ,这时你怎么办?怎么办?
这时 ActivityLifecycleCallbacks 就派上用场了, App 中的所有 Activity 只要执行完生命周期就一定会调用这个接口实现类的对应方法, 那你就可以在 onActivityCreated 中将所有 Activity 加入集合,这样不管你是不是三方库的 Activity 我都可以遍历集合 finish 所有的 Activity.
项目地址:http://download.csdn.net/download/zhanghuaiwang/10217730