Android Service重启恢复(Service进程重启)

转自:看书的小蜗牛
来源:CSDN
原文:https://blog.csdn.net/happylishang/article/details/81776217?utm_source=copy

Android系统中,APP进程被杀后,等一会经常发现进程又起来了,这个现象同APP中Service的使用有很大关系,本文指的Service是通过startService启动的,而不是通binderSertvice启动的,binderSertvice是通Activity显示界面相关的,如果两者统一进程,binderSertvice的影响可以忽略,如果不是同一进程,Service会被重启,毕竟业务都没了,Service也没必要启动了,但是对于通过startService启动的服务,很可能需要继续处理自己需要处理的问题,因此,可能需要重启。

相信不少人之前多少都了解过,如果想要Service在进程结束后重新唤醒,那么可能需要用到将Service的onStartCommand返回值设置成START_REDELIVER_INTENT或者START_STICKY等,这样被杀后Service就可以被唤醒

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    return START_REDELIVER_INTENT(或者START_STICKY  、START_STICKY_COMPATIBILITY);
}

进程被杀后,START_NOT_STICKY 不会重新唤起Service,除非重新调用startService,才会调用onStartCommand,而START_REDELIVER_INTENT跟START_STICKY都会重启Service,并且START_REDELIVER_INTENT不仅会将之前所有的startService的Intent都重发给onStartCommand,所有在AMS中会保存所有START_REDELIVER_INTENT的Intent信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 系统中,Service 是一种可以在后台运行的组件,它通常用于执行一些长时间运行的任务或者在后台进行一些操作。但是,如果 Service 所在的进程被系统杀掉或者重启了,那么 Service 就会被销毁,从而导致服务中的数据丢失,如果我们需要保持 Service 中的数据不丢失,就需要进行重启恢复Android 系统提供了两种方式来实现 Service重启恢复:onStartCommand() 方法和 onBind() 方法。 1. onStartCommand() 方法 当 Service 重启时,系统会调用 onStartCommand() 方法,我们可以在这个方法中处理一些初始化操作,比如读取之前保存的数据,然后根据这些数据来恢复 Service 的状态。 具体做法是,在 Service 的 onStartCommand() 方法中,通过 Intent 的 getParcelableExtra() 方法获取之前保存的数据,然后进行恢复操作。 ``` @Override public int onStartCommand(Intent intent, int flags, int startId) { // 获取之前保存的数据 MyData myData = intent.getParcelableExtra("MyData"); if (myData != null) { // 进行数据恢复操作 } // 其他初始化操作 return super.onStartCommand(intent, flags, startId); } ``` 2. onBind() 方法 如果 Service 是绑定型的,那么当 Service 所在的进程重启时,系统会重新绑定到 Service,这时就会调用 onBind() 方法。我们可以在这个方法中进行数据的恢复操作。 具体做法是,在 Service 的 onBind() 方法中,返回一个实现了 Binder 接口的对象,然后在这个对象中提供一些接口来进行数据的恢复操作。 ``` public class MyService extends Service { public class MyBinder extends Binder { public MyData getMyData() { // 进行数据恢复操作 } } private final IBinder mBinder = new MyBinder(); @Nullable @Override public IBinder onBind(Intent intent) { return mBinder; } } ``` 以上是 Service 重启恢复的实现方式,通过这些方法可以保证 Service进程重启后能够恢复之前的状态,从而避免数据丢失的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值