通过在MainActivity中拦截Back键来实现进程保活功能
来源:互联网 发布:淘宝美工的岗位说明书 编辑:程序博客网 时间:2024/05/20 00:50
今天在分析解决一个问题时,通过Log发现第三方应用脉脉在按Back键“退出”应用时,竟然会调用Launcher。当时看到后感到很奇怪,因为我们平时写应用时,根本就不会在应用中去写调用Launcher的代码,应用若想回到 Launcher,只需要直接按Home键及连续按Back键就可以了。难道这是脉脉的多此一举吗?
后来,通过adb shell dumpsys activity a 命令将Activity栈打印出来时,终于想明白了脉脉应用的意图。我们知道Android系统在内存不足的时候会根据进程的侁先级来Kill掉一些进程,这个优先级的依据就是OOM_ADJ。根据应用所处的状态不同,系统会分给它不同的OOM_ADJ,其中OOM_ADJ的值越小,表示进程的优先级越高,越不容易被杀,具体在源码的http://androidxref.com/7.1.1_r6/xref/frameworks/base/services/core/java/com/android/server/am/ProcessList.java 文件中进行了声明。我们知道进程的状态大致可以分为以下五类:前台、可见、Service、后台、空进程,它们的优先级是依次减小的。知道些以后,也就不难想明白脉脉应用为什么要在应用“退出”时调用Launcher的意图了。若我们平时不在自己应用的MainActivity中拦截Back键,并在响应函数中调用Launcher,那么我们的应用在回到 MainActivity后,再点击Back键时,就会因为Activity的销毁而变成一个空进程。而如果我们能够在MainActivity中拦截Back键,并在响应函数中调用Launcher,那么我们应用的MainActivity并不会销毁,而只是退到了后台。这样,我们的应用也至少是一个后台进程,进程的优先级也至少要高于空进程,所以不会那么容易被杀。所以,通过在MainActivity中拦截Back键,并在响应函数中调用Launcher,可以在一定程度上实现进程保活的功能 。
1 0
- 通过在MainActivity中拦截Back键来实现进程保活功能
- 在Fragment中拦截BACK返回键,具体实现
- 在ActionBar中加入Back键或者其他功能
- Android中Back键实现Home键功能
- 登录页面通过cookie实现保用用户名的功能
- 进程保活(实现离线推送)
- back键后台(back实现home的功能)
- IONIC 中使用拦截功能来实现API接口访问的数据缓存
- 在MainActivity中调用TabLayout
- 进程保活-踩坑篇
- Android进程保活
- 进程保活方法
- Android 进程保活
- Android进程保活
- Android进程保活
- 进程保活大全
- Android 进程保活
- Android进程保活
- Ehome:智能家居之手持终端计步器功能实现
- LeetCode专题----DFS
- UIView 查找subview 和 层次
- L2-004 这是二叉搜索树吗?
- RocketMQ(四)特性
- 通过在MainActivity中拦截Back键来实现进程保活功能
- CentOS 7 开启端口
- 无名管道
- java web 标签库 jstl;spring tag;spring secu
- 派生类构造函数执行次序
- 《HeadFirst设计模式》读书笔记-第3章-装饰者模式
- 贝叶斯公式在生活中的应用
- hadoop的hdfs常用文件操作命令
- switch case正确的使用姿势——在代码之外的思考