使IntentService在执行handler.postDelayed runnable之前不会休眠

时间:2014-01-28 13:40:36

标签: android multithreading intentservice postdelayed

在我的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);
        //...
   }
   //...
}

2 个答案:

答案 0 :(得分:4)

不要使用IntentService。它不是为您的场景设计的。使用常规Service。将您的代码放在onStartCommand()中。在run()方法的底部,请致电stopSelf()实例上的Service将其关闭。

答案 1 :(得分:1)

您需要停止onHandleIntent,直到Runnable完成为止。这可以通过使用CountdownLatch来实现,它在onHandleIntent方法结束时等待,并在run方法结束时释放。

注意:这将导致意向服务不处理您发送的其他意图,直到前一个意图完成(20秒后)。

您可能还想在onHandleIntent的开头获取部分唤醒锁,并在结尾处释放它。