近来面试常遇到这个问题, 记录一下
参考: http://blog.csdn.net/zhangweiwtmdbf/article/details/52369276
一. 提升进程优先级, 降低被杀死的概率. ---- 这算是未雨绸缪了
二. 进程被杀死后进行拉活. ---亡羊补牢
提升进程优先级的办法: 先搞清楚有几种优先级, 分别是: 前台进程, 可见进程, 服务进程, 后台进程, 空进程.
将service通过调用startForeground()来做到把进程优先级设置为前台进程,
1. 提升进程优先级的方法:
1.1 利用activity提升权限, 通过显示一个只有一像素的页面, 避免在手机锁屏时, 后台进程被系统清除
还要将activity排除在最近应用列表中, 还要把activity设置为透明.
据说适用于所有android版本, 这个待验证.
1.2 将后台service与一条通知栏通知绑定在一起,
2. 拉活, 死而复生的办法
2.1 监听各种常见广播: 网络状态变化, 文件系统挂载状态变化, 应用安装卸载广播, 数据线插入, 屏幕亮灭, 锁屏, 等等..
2.2 找到第三方应用的广播, 监听之. 不稳定,
2.3 将 Service 设置为 START_STICKY
2.4 在native层fork子进程, 监听, 并启动.
2.5 利用 JobScheduler 机制拉活 适用于5.0之后的手机
2.6 利用账号同步功能. ---- 这个需要好好研究账号同步功能, android N版本开始好像不再有效
2.7 利用系统通知管理权限进行拉活
2.8 利用辅助功能拉活,将应用加入厂商或管理软件白名单。