Android进程保活心得

作者: 见事迟 | 来源:发表于2017-06-30 23:07 被阅读974次

最近很忙,老板的需求不断,又是独立开发,还需要兼顾其他一些事情。当然这些都是给自己的借口。以后勤劳一点,写点文章也算留点念想。
因为项目实现了闹钟功能,也就牵扯到了进程保活。所谓保活即进程在后台一直运行不被杀死。统计一下目前的保活手段:

1.监听系统广播,如开机、充电状态、网络变化、安装卸载app、锁屏解锁、集成的推送消息等等,亲测无效,在进程被杀了之后也无法再监听到系统广播,也就不存在拉起,只能作为辅助手段,稍后会提起。
2.实现一个隐藏的前台服务,这个网上很多实现方法,也是我最开始使用的手段。实际上是把进程的优先级给提高了一级,锁屏时间长了还是会被杀死。
3.使用Linux命令启动一个新进程进行相互保护。才疏学浅,并不太理解原理,不敢多说,详情看这篇博客。亲测无效,不敢说是大神写的不对,可能是我姿势不对。
4.�使用子进程进行相互保护,简而言之就是建两个service,一个是子进程:

android:process=":remote"

亲测无效,这个一点点用都没有,因为进程被杀了之后子进程也同时被杀。
5.谣传QQ曾经让自己不被杀死,曾使用过后台显示一个全透明的、只有1x1像素大小的窗口,这个很匪夷所思,像IOS5之后的后台无限播放无声音乐一样狗血,甚至曾经我还嘲笑过这个做法,认为是给开发者抹黑,扰乱环境云云。今天就打脸了,因为我今天就在生产环境上用了这个做法。

以上所有出现的"被杀死"字样全部指的是进程后台状态自动被杀死,而不是指用户手用杀死,类似iphone连按两次HOME键上划杀死后台进程,这个只有一种办法保证不被杀死,就是把你应用加入到系统杀死进程的白名单。所谓跟手机厂商合作加入白名单就是指这个。这里不得不说一个很有意思的app:日程管理时间管理。它里面有引导用户进行白名单设置的操作,很有意思,同事让我看的时候我只想说



  简单说上它就是引导用户手动设置了“厂商把你的app加入白名单”这个操作,这个也被我学了过去,连带着页面一起。这只是第一步。
  接下来如我上面所说,除了4被遗弃之外,把所有的手段都用上了,一开始并没有用5,因为我感觉已经够了。但是依然无法阻止在锁屏+后台的情况下被杀。于是我用上了最后一种手段。下一篇博客会详细说明。
  最后一步,我参考了360,在双击返回键后并没有

 Process.killProcess(Process.myPid());

System.exit(0);

而是

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
getAppContext().startActivity(intent);

并且在清单文件中加入了

android:excludeFromRecents="true"

作用是不在最近使用的列表中出现,也就是连按两次HOME键就不会出现我的app了。
  至此,我整个的保活就结束了。欢迎技术讨论,拍砖也请拍。

相关文章

网友评论

  • 08_carmelo:文中多次提到“”亲测无效“”,请问怎么测的?
    你如何模拟 app在后台被系统kill? 以及怎么对比改动前后的差异
    08_carmelo:@见事迟 个人理解:这个属于force-stop,理论上可以kill所有进程。进程保活应该去处理触发系统进程管理机制导致的killed
    见事迟:@08_carmelo 没什么有什么差异不差异,只有实现没实现。既然没达到效果,自然是没实现
    见事迟:@08_carmelo 在设置-应用程序管理-正在运行,找到app,强行停止
  • 525bd2f87aa4:QQ,微信那些不是跟大厂商合作的吗?怎么会用到这种保活?
  • bcf5370e7ba5:一般手机会有一个全部清除这个有法破吗
    见事迟:5.0以下你可以试试文中那个进程保活库。5.0以上的手机可以用添加白名单的方法处理
  • 怒指天空:大哥,我最近也要写加入白名单的那个功能,能否告知下你是怎么写的吗?
    见事迟:@怒指天空 应用宝上搜,icon是个:heavy_check_mark:
    怒指天空:@见事迟 餐饮类app?我搜的到点是一个外卖的app,感觉不对劲啊
    见事迟:你去市场上搜“到点”,下载下来看看他的实现你就明白了
  • 聪聪的豆芽:rom开发和应用开发的对决,实际上现在的办法在rom中都挂了,比如小米。。。。QQ之前有试过白名单去除后切掉也是无法唤起的。
  • 聪聪的豆芽:你可以试下把QQ从白名单去除后还能不能唤起:wink: :wink:
    聪聪的豆芽: @见事迟 收不到就对了😁😁😁
    见事迟:我在我的华为(6.0系统)和同事的小米(7.0系统)上试的,不论是qq还是微信,在去除白名单之后手动杀死都不能再收到消息
  • 怒指天空:开启1像素的方案,app退到后台,然后锁屏,开屏后,会自动进入app吗?如果不会,我感觉,过一段时间还是会被杀死
    见事迟:你可以去看我的后一篇博客,可以看到一像素页面是在黑屏时唤醒、解锁时打开,并不会打开其他页面,所以进程优先级上是前台应用,但是并不会让用户察觉到
  • 391c7ed5c5e5:但是有些APP退到后台之后,长时间不使用,系统为了节约资源或者系统资源紧张的时候会主动杀死一些不使用的App啊,这个你怎么破呢!
    见事迟:监听系统广播,每次相应的广播发出,都会检查一次主服务和伪前台服务,也就是我文中第一条和第二条的结合。这样app就会保持活性,就不会被杀死了。
  • SteamPY:期待,到期后有个案例显示最好,看的更容易懂,谢了
  • 9cdc0bad580e:期待下一篇 用jobservice?😁
    9cdc0bad580e: @林妹妹的妹妹 哈哈 期待您哦 我那块也还没太懂
    见事迟:@林妹妹的妹妹 ...你怎么知道我还用了jobservice
    用了但是没效果,也是太着急了,没有细看api,可能用的姿势不对。回头明白了发打出来吧

本文标题:Android进程保活心得

本文链接:https://www.haomeiwen.com/subject/dgnicxtx.html