我试图理解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()
实例执行时死亡,因为其Service
在Looper
的IntentService
方法中终止。