转自:看书的小蜗牛
来源: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信息