Android:监听应用前后台切换及思考

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源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,041评论 25 709
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 11,009评论 2 51
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,711评论 0 17
  • 最喜欢离家出走 沿着陈旧的铁道和开至荼蘼的矮花 命运的蹊跷被逐渐显见 我站立在天桥上 街灯照亮城市的寂寞 卖气球的...
    f3494c632b49阅读 2,662评论 7 16
  • 今天在家里上班,吃午饭时看了一部记录片,叫《无处安放的黄昏》。 刚看这个标题,我以为是老年人晚年生活的,没想到,却...
    奔跑的彼得兔阅读 4,647评论 0 0