onReceive最大线程睡眠

时间:2015-07-20 16:54:41

标签: java android

对于Android应用程序,我需要在onReceive方法启动后休眠。

通过实验,我发现我可以在<20秒内完成Thread.sleep。但是,我需要睡觉> 30秒。一个接一个地安排睡眠并没有帮助(六个5秒睡眠)。

(是的,我知道我不应该在UI线程中这样做,它不是UI线程)。

有关为什么onReceive有最大Thr​​ead.sleep以及如何解决这个问题的想法?

2 个答案:

答案 0 :(得分:0)

为了安排未来事件,最佳做法是使用Timer,而不是Thread.sleep()。您不能使用onReceive()中的Timer(或任何异步调用),因为在onReceive()返回后进程终止。

正如@pskink所提到的,BroadcastReceivers仅用于短期任务。也许你可以发布一些你的设计和你想做的事情,这样我们可以更好地帮助你。

文档推荐

  

对于运行时间较长的操作,您通常会将一个服务与BroadcastReceiver结合使用,以便在整个操作期间保持包含进程处于活动状态

如果您实现了服务,则可以使用Timer实现30秒的延迟。

答案 1 :(得分:0)

您可以在onReceive中使用view.postDelyed。例如

public void onReceive(...

  mainView.postDelayed(new Runnable() {
    @Override
    public void run() {
      setListRecipients(savedInstanceState.getStringArrayList(RECIPIENTS));
    }
  }, POST_DELAYED_TIME_IN_MILLISECONDS);