本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!
一般情况下应用保活的场景在于:后台要不断定位描述一条清晰轨迹、IM通信需要及时收到消息提醒等。
所谓保活就是避免被应用杀死,前台应用自然不用说,主要是后台应用。我们知道Android的应用优先级是-16到15,系统进程一般拥有-16到-1的优先级,而普通应用只拥有0-15的优先级;级别越小优先级越高。
首先进入后台的应用不能是流氓进程,比如频率的定位、发送网络请求、不允许屏幕关闭等;如果做心跳,需要选择合适的周期比如2分钟一次,进行socket长连;可以设计一个前台进程一个后台进程,互相监测重启对方;保持至少有1像素位于前台。
其次如果强制保活,那么90%的可能会杀死进程;4.4以前可以用AlarmManager的setRepeating方法可定时保活,之后可以使用setAndAllWhileIdle方法在保持在一段时间内集体唤醒;
再者可以通过注册通知,比如开机启动、时间变动、锁屏解屏、网络开关、收到短信、打入电话等;7.0以后可以使用JobSchedule的Api进行轮循操作,通过主动注册网络切换广播来监听(配置文件注册方式已被禁止)
如果是Service还可以通过startForeGround的方式来让服务处于前台,避免杀死,关闭时使用stopForeGround来去掉。另外在重写onStartCommand,返回START_STICKY,使service被杀死后自动重启
public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; }
还有通过WakeLock,需要申请到权限
获取锁:
终归这样的方式很流氓,就像张小龙对微信的期许一下:希望它是个人们有需要用一下,用完就放开的工具。
给Activity设置如下标签,当用户点击最近任务时,App不会显示在内,达到隐藏的目的
android:excludeFromRecents="true"
附斑马行车对用户权限的要求(主要设置白名单)
恭喜你,看到最后发现新天地!无论如何,在保活的时候要考虑下用户的感受,理性保活!
其他如启动1像素的activity,Native进程保活,通知拉起保存Service、监听第三方和系统的公开广播
Android进程保活招数大全