高版本Service保活

Service保活思路,分两步:
一、优化Service优先级,降低被杀死的概率
二、杀死后拉起

Service优化:
1、增加通知,设置为前台服务
NotificationCompat.Builder nb = new NotificationCompat.Builder(this);
nb.setOngoing(true);
nb.setContentTitle(getString(R.string.app_name));
nb.setContentText(getString(R.string.app_name));
nb.setSmallIcon(R.drawable.icon);
PendingIntent pendingintent =PendingIntent.getActivity(this, 0, new Intent(this, Main.class), 0);
nb.setContentIntent(pendingIntent);
startForeground(1423, nb.build());

2、Manifest属性设置
android:priority=“1000”//优先级
android:enabled=“true”//是否可被系统启动

3、START_STICKY
在Services的onStartCommand方法return START_STICKY
Services在被杀死后,可被系统拉起,第一次5s/第二次10s/时间依次翻倍
1)START_STICKY:在Service被关闭后,重新开启
2)Service
START_NOT_STICKY:服务被异常杀掉后,系统将会被设置为started状态,系统不会重启该服务,直到startService(Intent intent)方法再次被调用。
3)
START_REDELIVER_INTENT:重传Intent,使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

4)START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

4、使用android:process属性
让service运行在独立进程当中,使得应用后台被kill时,不会影响service
android:process=":location"
查看进程命令:
1)先进入shell模式
adb shell
2)grep命令过滤包名
ps|grep net.xfxb.blissdelivery

私有进程和公有进程的区别:
私有进程,android:process的值以冒号开头的话,那么该进程就是私有进程;其他应用的组件不可以和它跑在同一个进程中。
全局进程,进程名称不以“:”开头的进程都可以叫全局进程,如android:process=“com.secondProcess”,以小写字母开头,表示运行在一个以这个名字命名的全局进

程中,其他应用通过设置相同的ShareUID可以和它跑在同一个进程。
--------------------以上优化方案,Service在后台运行不锁屏状态下正常运行,锁屏后台运行状态大概能持续15分钟左右--------

Service拉起:
待续

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值