对于Android应用程序,我需要在onReceive方法启动后休眠。
通过实验,我发现我可以在<20秒内完成Thread.sleep。但是,我需要睡觉> 30秒。一个接一个地安排睡眠并没有帮助(六个5秒睡眠)。
(是的,我知道我不应该在UI线程中这样做,它不是UI线程)。
有关为什么onReceive有最大Thread.sleep以及如何解决这个问题的想法?
答案 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);