版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:blog.csdn.net/zhanghuaiwa…
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