用ActivityLifecycleCallbacks 判断前后台运行

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值