android进程保活相关资料

查看进程信息:

adb shell

ps|grep 包名

 

2|PD1709:/ $ ps|grep com.haocai.app.keepliveprocess

u0_a305                        470            917                    1817560                        55908       com.haocai.app.keepliveprocess

USER 进程当前用户     进程ID      进程的父进程ID      进程的虚拟内存大小      实际驻留”在内存中”的内存大小      进程名

 

cat /proc/进程id/oom_adj

查看到当前进程的adj值,adj值最低,越不容易被杀死

报错:一直报 Permission denied

获取手机root权限(无奈刷了个机),开启开发者调试,点击其中的Root 授权为应用与adb,然后先执行adb root命令,在执行其他命令,就不会出现Permission denied   (或者root后执行adb remount)

 

查看当前最顶部活动Activity:(注意分开两步执行)

adb shell

dumpsys activity | grep "mFocusedActivity"

 

问题:无法执行adb命令

1.先进入到adb目录

cd C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools

2.执adb shell

 

----------------------------

进程保活方案(本质提高进程adj,越低越不容易被杀死)

参考:

Android进程保活实践 http://mp.weixin.qq.com/s/6w0tMtDA9kPwo0E9xq_BsA

Android进程保活的一般套路 https://blog.csdn.net/u013263323/article/details/56285475

 

进程被kill场景:

1.点击home键使app长时间停留在后台,内存不足被kill

解决:使app至少运行一个Service,Service.startForeground() 设置为前台服务,可以将oom_adj的数值由4降低到1,大大提高存活率。

2.在大多数国产手机下,进入锁屏状态一段时间,省电机制会kill后台进程

解决:监听系统锁屏开屏的广播,然后利用一像素点透明Activity,可以将oom_adj数值降低到0,0是android进程的最高优先级。

3. 用户手动释放内存:包括手机自带清理工具,和第三方app(360,猎豹清理大师等)

解决:手动引导用户开启自己app的手机rom 白名单,例如小米手机用户引导开启“自启动”,这个自启动会使得被kill后的进程,过一段时间再次复活

补充:当极端条件把后台进程kill后,可以通过service自有api来重启service。在onStartCommand方法中,返回START_STICKY即可,测试:手动杀死服务进程,会观察到过一会服务再次启动。

注意:1. Service 第一次被异常杀死后会在5秒内重启,第二次被杀死会在10秒内重启,第三次会在20秒内重启,一旦在短时间内 Service 被杀死达到5次,则系统不再拉起。

2. 进程被取得 Root 权限的管理工具或系统工具通过 forestop 停止掉,无法重启。

<application android:persistent="true" 属性可以让主进程更加持久

android避免程序出现在系统回收列表中,当前正在运行的app不会出现在回收列表,这个估计可以使用1像素点实现

 

补充:

1.默认情况下,service与activity属于主进程,service可以单独指定主进程下的子进程

2.保活子进程,那杀死子进程会复活,保活主进程,杀死会保活主进程。测试子进程与主进程没有明确的依赖关系。

3.服务属性process配置进程则保活改mmmlive进程,不设置该属性则保活默认的主进程。如果父类服务process与子类process设置不一样,则先启动父类的再启动子类的。注意:父类子类process不一样,测试情况,子类进程杀死可以复活,父类的不可以,如果先杀死父类,再杀死子类,则子类复活会带活父类的进程。建议:父类子类进程一致,可以使用remote(百度地图用这个名词)

<service android:name="com.haocai.app.keepliveprocess.e.DemoService"

    android:process=":mmmlive"/>

 

红色部分是容易被回收的进程,属于android进程

绿色部分是较难被回收的进程,属于android进程

其他部分则不是android进程,也不会被系统回收,一般是ROM自带的app和服务才能拥有

 

发布了104 篇原创文章 · 获赞 5 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览