2

在我的 IntentService 类的 onHandleIntent 中,我创建了包含一个可运行对象的句柄,该句柄应在 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);
        //...
   }
   //...
}
4

2 回答 2

4

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

于 2014-01-28T13:42:34.873 回答
1

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

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

您可能还想在 onHandleIntent 开始时获取部分唤醒锁并在结束时释放它。

于 2014-01-28T13:44:21.303 回答