背景
- 业务很多时候都需要监听App处于前台还是后台进行业务逻辑处理,以前我们通用做法是通过通过application注册监听activity生命周期回调,用onResume和onStop的次数来判断大小就可以得出App此刻在前台还是后台。
官方支持(更为简单接入)
- Android官网深知我们开发的诉求,现已通过ProcessLifecycleOwner 官方类支持给开发者回调app处于前台还是后台了,通过给ProcessLifecycleOwner注册listener,当应用回到前台时候就会回调onResume,当应用切到后台回调onPause。
ProcessLifecycleOwner.get().lifecycle.addObserver(object: DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
//应用在前台
}
override fun onPause(owner: LifecycleOwner) {
//应用在后台
}
})
源码分析
- 从图一可以看出官方思路和我们之前是一致的,attach方法是通过application创建时候调用init初始化传入上下文,这里现跳过不看。通过Callback监听App内的activity生命周期。
图一
-
从图二分析在activityPaused和activityResumed函数里面只不过是统计activity的resume和pause的回调,当resume的次数为0的时候,postDelay 700ms,这里的700ms我感觉是为了避免那种快速退到后台又返回的,这种情况就不返回App退到后台状态给开发者了。
图二
总结
- 官方也是借鉴了我们曾经的思路,只不过将我们每个人所需要做的封装起来,让他们不用写重复的代码了。
- 技术不断迭代,人需要不断学习进步。