进程保活

由于近一段时间,公司在进行手机计步项目的研发工作,涉及到了后台保活的问题(要不然就不能计步了),踩了很多坑,特来总结一下。

首先,这次针对的就是“应用被系统回收”导致后台被清理的问题。

由于Android系统的碎片化问题(已无力吐槽),以及各大厂商的定制化ROM,会在系统中加入一些“后台管理”的功能。尤其以华为和魅族为首的厂商,美其名曰是为了系统的流畅性,关闭屏幕后数分钟就会强制清理后台(真是把小弟玩死了)。像这样的问题,可能就是开发者非常无力的地方了(只能通知用户手动加入白名单了),我也没有办法,谁叫人家都是大厂子呢......

接下来说说我们可以控制的部分:
1. 进程拆分
2. 提高优先级和重启
3. 保证PUSH进程的内存消耗少一点,用PUSH进程拉起其他可能被清理掉的进程。

1.按功能拆分为UI进程、PUSH进程,并通过AIDL保持通信。
2.分为以下几种

  • Android 的前台service机制。但该机制的缺陷是通知栏保留了图标。
    对于 API level < 18 :调用startForeground(ID, new Notification()),发送空的Notification ,图标则不会显示。
    对于 API level >= 18:在需要提优先级的service A启动一个InnerService,两个服务同时startForeground,且绑定同样的 ID。Stop 掉InnerService ,这样通知栏图标即被移除。
  • 将service的onStartCommand方法的返回值设为START_STICKY,可以保证有一定的机率让service重新启动(废柴,没用)。
  • 在service 的onDestory里面重启服务(有点效果,但不能根治,有时候进程挂掉,却不会调用onDestroy方法)

3.及时拉起进程,我们使用过个推,但是个推表示在应用被完全杀死的情况下,除非手机内还有使用个推的应用,否则无法拉起,这个要注意,当然如果你是大神,可以自己编写长连接和推送,就当我什么都没说。

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