Android进程保活心得

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

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

android:process=":remote"

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

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


Android进程保活心得_第1张图片

  简单说上它就是引导用户手动设置了“厂商把你的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了。
  至此,我整个的保活就结束了。欢迎技术讨论,拍砖也请拍。

你可能感兴趣的:(Android进程保活心得)