Android监测前后台切换
16lz
2021-01-23
提起监测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)
更多相关文章
- Android小项目之欢迎滑动页面(页面布局&底部点点)
- 启动页面
- Android 后台保活设计2019,最新版本
- android如何获取后台正在运行的service
- 移动端页面宽度自适应
- java后台接收android客户端通过http方式发送的数据
- Android打开页面