Android:监听应用前后台切换及思考
2016-06-12 17:23
260 查看
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更优,简单,不耗性能。
可以使用观察者模式来重构代码,就像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源码
文/苍穹_(简书作者)
原文链接:http://www.jianshu.com/p/e3cc14de03a0
需求:监听应用前后台切换
分析:监听应用前后台切换实现方式有两种
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源码
文/苍穹_(简书作者)
原文链接:http://www.jianshu.com/p/e3cc14de03a0
相关文章推荐
- Android开发学习笔记:Service的简介和启动方式
- Android学习笔记——界面相关逻辑
- Android 编程下 Touch 事件的分发和消费机制
- Android通用流行框架大全
- Android属性动画
- Android下模拟点击事件
- android Service 的简单使用
- android 焦点控制及运用
- Android性能优化实战前篇
- Android 根据触摸状态切换背景,颜色,字体等状态
- Android入门--获得屏幕分辨率
- Android ListView初始化简单分析
- Android单元测试(一)——概述
- Android批量打包
- Android中ListView嵌套导致高度错误
- Android.mk 文件语法详解
- 我们为什么要在Android中使用RxJava
- Android初学者的疑惑与“死板”的Android初学之路
- android键盘
- Android List 分组显示时的算法