提起监测Android前后台切换的监测,网上查询,下面的方案应该会被看到:

public class MainApplication extends Application {    private int count = 0;    @Override    public void onCreate() {        super.onCreate();        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {            @Override            public void onActivityStopped(Activity activity) {                Log.v("LifecycleCallbacks", activity + "onActivityStopped");                count--;                if (count == 0) {                    Log.v("LifecycleCallbacks", ">>>>>>>>>>>>>>>>>>>切到后台  lifecycle");                }            }            @Override            public void onActivityStarted(Activity activity) {                Log.v("LifecycleCallbacks", activity + "onActivityStarted");                if (count == 0) {                    Log.v("LifecycleCallbacks", ">>>>>>>>>>>>>>>>>>>切到前台  lifecycle");                }                count++;            }            @Override            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {                Log.v("LifecycleCallbacks", activity + "onActivityCreated");            }            @Override            public void onActivityResumed(Activity activity) {                Log.v("LifecycleCallbacks", activity + "onActivityResumed");            }            @Override            public void onActivityPaused(Activity activity) {                Log.v("LifecycleCallbacks", activity + "onActivityPaused");            }            @Override            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {                Log.v("LifecycleCallbacks", activity + "onActivitySaveInstanceState");            }            @Override            public void onActivityDestroyed(Activity activity) {                Log.v("LifecycleCallbacks", activity + "onActivityDestroyed");            }        });    }}

上面的方案在大多数情况下是没有问题,问题在于当需要支持水平模式时该方法就失效了。当我们旋转设备时activity将会重建,onStart方法将被再次调用,这时将会错误的判断为app第二次被打开。所以若是APP支持水平模式,则不能采用这个办法。

新方案

其实判断APP是否切换到后台的方法很简单:
只要判断前一个页面退出后有没有新页面进入即可,如果有新页面进入那么则App保持在前台,如果没有新页面进入,那么则表明App此刻进入了后台。
这里涉及到几个问题:
1.采用何种方式监测Activity状态变化:基类方式还是Application里面?
2.在哪些方法里面做手脚:不用说,肯定是onStart和onStop
3.怎么判断前一个页面结束之后后一个页面进入?
问题1很简单,肯定是采用Application,因为可能会有第三方Activity被调起,如果采用基类方式,是无法监测第三方Activity的状态变化的,剩下的就是问题3了,方案是这样的,在前一页面结束后,开始计时,在有限时间内,新页面如果没有出现,那么就认为App进入了后台,否则则继续保持在前台。
具体方案参考这个链接即可了(https://github.com/hehonghui/android-tech-frontier/blob/master/issue-8/%E6%A3%80%E6%B5%8BAndroid%E5%BA%94%E7%94%A8%E7%9A%84%E5%90%AF%E5%8A%A8%E4%B8%8E%E5%85%B3%E9%97%AD.md)

更多相关文章

  1. Android小项目之欢迎滑动页面(页面布局&底部点点)
  2. 启动页面
  3. Android 后台保活设计2019,最新版本
  4. android如何获取后台正在运行的service
  5. 移动端页面宽度自适应
  6. java后台接收android客户端通过http方式发送的数据
  7. Android打开页面

随机推荐

  1. 史上最全的Android数据结构与算法面试题
  2. Android中常见的内存泄漏之上下文对象
  3. [Android]反编译查看、修改源码、逆向分
  4. Android仿UC浏览器左右上下滚动功能(附源
  5. Android(安卓)如何正确使用我们的图片资
  6. Android学习笔记之界面控件大小dip及布局
  7. Android(安卓)Studio apk打包,keystore.jk
  8. Kotlin系列——在Android中使用协程以及
  9. AsyncTask的使用和原理探究(一)
  10. android解决屏幕适配问题