在我的IntentService类的onHandleIntent中,我创建了包含runnable的句柄,该句柄应在20秒后完成。不幸的是,我的服务在这段时间之前就会睡觉或被摧毁。 我也尝试过CountDownTimer,但我遇到了同样的问题。 有人有任何想法我可以让onHnadleIntent等待吗?谢谢!
这是代码:
public class MyService extends IntentService {
//...
@Override
protected void onHandleIntent(Intent workIntent) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("20 seconds later","I am here");
}
}, 20000);
//...
}
//...
}
答案 0 :(得分:4)
不要使用IntentService
。它不是为您的场景设计的。使用常规Service
。将您的代码放在onStartCommand()
中。在run()
方法的底部,请致电stopSelf()
实例上的Service
将其关闭。
答案 1 :(得分:1)
您需要停止onHandleIntent,直到Runnable完成为止。这可以通过使用CountdownLatch来实现,它在onHandleIntent方法结束时等待,并在run方法结束时释放。
注意:这将导致意向服务不处理您发送的其他意图,直到前一个意图完成(20秒后)。
您可能还想在onHandleIntent的开头获取部分唤醒锁,并在结尾处释放它。