Service保活
扯谈
永生,是人类从古至今不断探寻的课题。不少人突然有了巨款,或是临近死亡,想做的事都是环球旅行,体验整个世界,似乎只有这么做才不枉此生。 毕竟生命稍纵即逝,人一辈子能体验的东西太少了,总想将美好的事物从有限变到无穷,殊不知正是因为有限,才格外美好。
在android系统中,生命周期的概念更是一个颇有禅意的比喻,仿佛这些死物都是有生命的。 一个个活蹦乱跳的activity、service可以随着上帝的指尖,从创造到毁灭,从毁灭到重生,在有限的内存中贪婪的汲取养分,不断进行轮回。 App一旦不小心Out Of Memory,大家各自尘归尘土归土,尘土归尘土。
扯谈完毕。
方法整理
- Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样。
- 覆写Service的onDestroy方法
- 通过startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill。
- 双进程守护:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程。
- 多进程守护:用C编写守护进程(即子进程),循环检查目标进程是否存在,不存在则启动它。 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
- 多app互相唤醒
- 设置闹钟,定时唤醒
- 前台Service保活:在应用退到后台后,另起一个肉眼难辨的 1 像素页面停留在桌面或通知栏上,让自己保持前台状态,保护自己不被后台清理工具杀死。
- 系统漏洞流:在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用(Android4.0系列的一个漏洞,已经确认可行)
- 联系厂商,加入白名单。
总结
对于生态来说,这种行为是不被提倡的。被用户发现,他们就会生气,要弄死这个app。
不过随着android5.0之后的版本的推出,谷歌对android系统的权限管理方式,应用许可,内存管理等方面都进行了很大的修改,引入了多项安全增强措施,root将变得困难。