Android判断进程在前后台最靠谱的方法
来源:互联网 发布:下一次金融危机 知乎 编辑:程序博客网 时间:2024/06/15 19:13
转载请标明出处
http://blog.csdn.net/mohan6/article/details/76177540
本文作者:【默寒的博客】
前言:前段时间做Push的时候,需要判断前后台。尝试网上的好多方法,都不太靠谱。遍历系统中正在运行的进程取第一个和自己的进程包名比较的方法在华为mate8不好使。 (7.0系统,怀疑可能是多任务处理才使得这种判断变的不可靠)。后来直接就避开了前后台判断,直接前后台统一处理了。最近一段时间做统计,需求要统计app被激活的次数,进程从后台进去前台就计数一次。那么必须要做前后台判断了。之前做Push的时候,用下面的方法判断过某个activity是否在前台。只要拿个变量稍作计数,就可以用来判断进程是否在前后台了。废话不多说,直接上代码。
在application中有个registerActivityLifecycleCallbacks的回调,在onCreate()中注册activity的生命周期回调。private int mCount = 0; mCount初始值是0,每有一个activity可见走onActivityStarted(),mCount就++;每有一个activity不可见走onActivityStopped(),mCount就--;这样通过判断mCount就可以知道进程在前后了。onActivityStopped()中如果mCount==0,说明是前台到后台。onActivityStarted()中如果mCount==1,说明是从后台到前台。然后在相应的位置做自己想做的操作就可以。
/** * 2017.6.19 * 判断应用在前后台 ym * 2017.6.30 新增判断议价详情页前后台标记 ym */ public void isRunningForeground() { if (Build.VERSION.SDK_INT >= 14) { registerActivityLifecycleCallbacks( new Application.ActivityLifecycleCallbacks() { @Override public void onActivityCreated( Activity activity, Bundle bundle) { } @Override public void onActivityStarted(Activity activity) { mCount++; //如果mCount==1,说明是从后台到前台 if (mCount == 1) { //执行app跳转到前台的逻辑// LogUtil.e("ym", "mCount前台" + mCount); //2017.7.17 友盟统计(App激活) ym start String buyer_mobile = share.getString("buyer_mobile"); if (TextUtils.isEmpty(buyer_mobile)) { buyer_mobile = "暂无"; } HashMap<String, String> buyerMobileMap = new HashMap<>(); buyerMobileMap.put("手机号", buyer_mobile);// LogUtil.e("ym", buyer_mobile); MobclickAgent.onEvent(getApplicationContext(), Contants.Application_Become_Active, buyerMobileMap); //2017.7.17 友盟统计(App激活) ym end } } @Override public void onActivityResumed(Activity activity) {// LogUtil.i("ym", "判断前后台界面:" + activity.getClass().getSimpleName() + "前台"); if (TextUtils.equals(activity.getClass().getSimpleName(), "ACT_BargainingDetail")) { Contants.ACT_BargainingDetailFlag = "foreground"; } } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) {// LogUtil.i("ym", "判断前后台界面:" + activity.getClass().getSimpleName() + "后台"); if (TextUtils.equals(activity.getClass().getSimpleName(), "ACT_BargainingDetail")) { Contants.ACT_BargainingDetailFlag = "background"; } mCount--; //如果mCount==0,说明是前台到后台 if (mCount == 0) { //执行应用切换到后台的逻辑// LogUtil.e("ym", "mCount后台" + mCount); } } @Override public void onActivitySaveInstanceState( Activity activity, Bundle bundle) { } @Override public void onActivityDestroyed(Activity activity) { } }); } }
阅读全文
0 0
- Android判断进程在前后台最靠谱的方法
- 判断程序在前台还是退到后台的方法
- Android 开发: 判断自己的APP在前台还是后台
- android判断应用在前台还是后台
- Android判断App在前台、后台
- android 判断应用运行在前/后台
- Android 判断程序在前台还是后台
- 判断app 在前后台的问题
- 判断Android程序是否在前台的两种方法
- Android 判断某一个应用是否在前台运行的方法
- Android判断应用是否在前台或后台
- Android判断应用是否在前台或后台
- android判断当前应用在前台还是后台
- Android判断APP是在前台还是后台
- Android之判断程序在前台运行还是后台运行
- 判断当前应用在前后台
- 判断当前所用的APP是否在前台还是后台
- fg、bg让你的进程在前后台之间切换
- JsonObject
- 元素等待————显式等待一
- CentOS 安装uwsgi提示找不到Python.h文件
- maven 打包报数组越界问题
- lombok 介绍及基本使用方法
- Android判断进程在前后台最靠谱的方法
- 编译libjpeg.so
- sendmail进程重复启动问题小结
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- 【bzoj1644】 [Usaco2007 Oct]Obstacle Course 障碍训练课
- 22-service之show hide disable
- java.lang.NoClassDefFoundError: maven的使用遇到的坑
- 数据结构之二叉堆(构建堆,堆排序)
- Emmet:HTML/CSS代码快速编写神器