Android:监听应用前后台切换

需求:监听应用前后台切换

分析:监听应用前后台切换实现方式有两种

1.起一个线程轮询当前应用进程,是否在ActivityManager.getRunningAppProcesses的第一个。

参考:http://tips.androidhive.info/2015/04/android-how-to-check-if-the-app-is-in-background-or-foreground/

2.添加一个BaseActivity在onPause和onResume中添加判断。

参考:http://steveliles.github.io/is_my_android_app_currently_foreground_or_background.html

总结:方案2更优,简单,不耗性能。

基于方案2的思考:

可能目前大多数应用都有BaseActivity继承至Activity,且BaseActivity的onPause和onResume函数中代码比较长,比如有用于统计的,用于debug的log,用于页面栈管理等等,不下3种业务。onPause和onResume函数中做了多种业务逻辑,这种设计是不合理的,要符合职责单一原则,这样代码也清晰很多。

可以使用观察者模式来重构代码,就像android源码中的onPause,onResume。

1.Activity的onResume函数。

Activity的onResume方法

2.Application的dispatchActivityResumed函数。

Application的dispatchActivityResumed函数

3.利用Application的registerActivityLifecycleCallbacks注册监听Activity的生命周期变化。

Application的registerActivityLifecycleCallbacks函数

4.Application的onCreate函数实现如下,这样就把BaseActivity中onPause,onResume代码重构到这里了,代码就清晰多了,BaseActivity就不会那么臃肿了。

Application的onCreate函数

总结:

1)设计代码时要职责单一(业务单一,不能像BaseActivity的onPause,onResume做了过多的业务)。

2)观察者模式很好的把同一类观察者的放到一个集合中,与发送消息者(BaseActivity)解耦开了,便于扩展。

3)多看android源码

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)在Java代码中设置style属性--使用代码创建Progress
  3. Android下拉列表spinner的实例代码
  4. S5PV210 Android(安卓)fimc驱动分析 - fimc_dev.c
  5. UC
  6. Android(安卓)Fragment的生命周期详解
  7. TabLayout与ViewPager的使用
  8. Android(安卓)camera系统开发之IPC (三)
  9. Android(安卓)源代码目录结构2- build

随机推荐

  1. What did Google change in the kernel?
  2. Android世界的15款开源的游戏开发引擎
  3. Android(安卓)soft (virtual) keyboard l
  4. ActivityManager: Starting: Intent { ac
  5. Android(安卓)DatePicker 使用示例
  6. android 上传Bitmap到服务器端
  7. 拍照或从图库选择
  8. Android(安卓)Studio3.0 Annotation proc
  9. 手机安全卫士开发系列(5)——自动更新
  10. setonClickListener()的解释