我试图理解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
停止?
答案 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