澄清IntentService的内部工作原理

时间:2016-04-22 22:29:21

标签: android android-service

我试图理解IntentService中的特定逻辑,特别是ServiceHandler

private final class ServiceHandler extends Handler {
    public ServiceHandler(Looper looper) {
        super(looper);
    }

    @Override
    public void handleMessage(Message msg) {
        onHandleIntent((Intent)msg.obj);
        stopSelf(msg.arg1);
    }
}

据我所知,stopSelf()被多次调用 - 每次调用startService一次。如果要处理多个项目,stopSelf会不会中断待处理项目的流量吗?很明显,这不是正在发生的事情,因为IntentService确实有效,但为什么呢?在处理完所有stopSelf之后,应该调用Intent似乎。

另一个问题 - HandlerThread中创建的onCreate何时会停止?显然它没有被stopSelf停止?

2 个答案:

答案 0 :(得分:2)

stopSelf(int startId)方法只会在Service启动的最近时间startId停止IntentService。如果Intent在处理startId时再次启动,则会向其发送不同的stopSelf(),因此请使用之前{{1}调用startId不会阻止它。

HandlerThread实例开始时,onCreate()中的Service将会死亡,因为Looper IntentService onDestroy()已终止{1}}方法。

答案 1 :(得分:1)

stopSelf(int)来电stopSelfResult(int),其中说:

  

如果服务的最近开始时间是startId,请停止服务。这与为此特定服务调用stopService(Intent)相同,但如果有来自onStart(Intent, int)尚未见到的客户的启动请求,则可以安全地避免停止。

由于IntentService只能按顺序工作,因此在最后startId发送到stopSelf

之前,它实际上不会停止