Android项目里要判断是Home按键。可是Home键不提供监听。麻烦。。
在应用里,按了home键就是被调到后台,再回到应用就是后台调到前台,那看看有没有可以判断应用前后台的方法吧。
如果整个项目只有一个Activity,那么简单了,利用生命周期函数,在onResume()方法里可以简单判断后台还是前台。
可是项目里有N多个Activity,调用关系复杂,生命周期耦合太多,,判断方法容易出错。
网上有办法通过ActivityManager获得栈顶的Activity的包名,然后判断是不是自己应用。
没有采用,因为Activity实在太多,每一个都加入这个方法,或者加入方法调用,这个工作量阿。。。
当然这也是一个备选方案了。。。
忽然发现项目里所有Activity都继承自一个BaseAcitvity(BaseAcitvity再继承自android的Acitvity类)。看来可以加判断方法到这个BaseAcitvity类里。
但是每一次进入都要调用调用这个方法,获取服务,获取列表,获取应用信息,最后只为了获得一个标记位的值,感觉好浪费。
继续作为备选方案吧。。
重新思考。既然已经被调到后台,那就是说,当前应用的所有页面都不在前台显示,
也就是说,当前应用的所有Acivity都至少走完了onPause()方法。
而且,我们应用的所有acitivity都继承自一个BaseAcitvity,那么在BaseAcitvity的onPause()里做个计数吧,
计数方法如下:
BaseAcitvity的onResume()或者onStart()方法里,++count;
BaseAcitvity的onPause()或者onStop()方法里,--count;
判断方法如下:
在onRestart()方法里判断count,如果<=0(事实上,不应该小于0),那么就是从后台进入了前台。
如此,应用里每一个Activity都会在前台时++count,移入后台时--count。
count好像堆栈计数,前台显示时就是push,计数加1;后台不显示时就是pop,计数减1。
堆栈里有Activity就是应用在前台,计数肯定>1;计数为0说明堆栈没有Activity,说明没有Activity在显示,应用在后台。
由此判断得以简单高效判断应用自身前后台状态,间接实现(部分的)Home键判断。
之所以是部分的Home键判断,因为这个方法只能判断前台后台状态,不是根据Home的key事件来判断的。
所以,如果应用被其他应用暂时中断,比如来电,锁屏等等,也会被当作Home事件来处理。
后记:这个方法在灭屏时会出问题,我是在onResume和onStop方法里计数,灭屏再点亮只会执行onPause和onPause,这样计数就会错乱。
所以对这个方法改进一下:
1 BaseActivity中声明一个静态的hashMap。
2 每一个继承自BaseActivity的Activity需要实现一个方法getAcitivityID(),返回一个ID,每个AcitivityID都不相同。
3 在onCreate、onStart、onResume 里操作hashMap,添加getAcitivityID()返回值,如果存在则不添加。
4 在onDestroy、onStop、onPause里操作hashMap,删除getAcitvityID()返回值,如果不存在则不操作。
5 子AcitvityID可以在调用super.onSart()或者super.onReume()前,判断hashMap的长度,如果是0,则是从后台调入前台的。
分享到:
相关推荐
android判断App前后台切换代码
ActivityLifecycleCallback判断程序前后台实例,网上的都说的不太详细,也没有实例,于是自己抽时间做了一个,可以使用,好帮助更好的理解
Android 后台Service 实现录像,无页面
Android一键清理后台代码实现,有动画及桌面小部件。 虚拟机环境为Android 4.4 ,API 19
本次项目主要实现了选课系统。用户分为学生和管理员两种角色。学生在用账号和密码登录成功后,会看到自己的课表信息,然后在选课列表里面进行选课,还可以查看和修改自己的个人信息。管理员有固定的账号和密码,成功...
android实现登陆和注册的前后台框架,利用http的post和get进行请求,请求方式已经封装完善
最简单的一个类,监听android 4.0+ 前后台切换
Android 用Service+OKHttp实现应用后台检测更新示例代码; Android 用Service+OKHttp实现应用后台检测更新示例代码 Android 用Service+OKHttp实现应用后台检测更新示例代码 Android 用Service+OKHttp实现应用后台...
本次项目实现了一个简单的仓库管理系统。用户身份分为超级管理员、出入库人员和商品管理员这三种角色。首先进行超级管理员的注册,然后登录超级管理员的账号和密码,进入主页之后进行添加用户,超级管理员可以添加和...
用于监听App前后台状态变化的工具类
android实现Service后台下载Notification进度条
android 实现开机自启动和后台运行 要求版本最低为2.1
最近在工作中遇到了这么一个需求:如何实现 Android 应用前后台切换的监听?下面来一起看看详细的介绍: iOS 内边是可以实现的,AppDelegate 给了一个回调监听: @UIApplicationMain class AppDelegate: ...
Android MediaRecorder 添加一个系统服务后台自动录视频
Android:前后台通信类HttpServletUtil
android实现activity后台运行.docx
android 后台监听按键事件方法及demoandroid 后台监听按键事件方法及demo
使用Java后台,Socket方法实现android群聊(android客户端+java后台) 包括android客户端+java后台,客户端使用androidstudio开发。
亲测可用的Android后台静默拍照源代码,涨知识啦,小白进阶提高,不容错过。
同时上传文件和相应的数据,实现前后台交互,同时上传文件和相应的数据,实现前后台交互同时上传文件和相应的数据,实现前后台交互