我试图理解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(int startId)方法仅在最近一次启动Service时才会停止。如果在处理startId时再次启动IntentService,则会向其传递不同的Intent,因此使用先前的startId调用stopSelf()不会停止它。
startId中启动的HandlerThread将在onCreate()实例执行时死亡,因为其ServiceLooperIntentService方法中终止。

10-04 17:13