对于安卓应用程序,我需要在onReceive方法启动后睡觉。
通过实验,我发现我可以做一个Thread.sleep <20秒。但是,我需要睡眠超过30秒。一个接一个地放睡眠不会有帮助(6个5秒的睡眠)。
(是的,我知道我不应该在UI线程中这样做,它不是UI线程)。
关于为什么onReceive有最大Thread.sleep以及如何解决这个问题,你有什么想法吗?
发布于 2015-07-21 00:59:40
为了安排将来的事件,最佳实践是使用Timer,而不是Thread.sleep()。不能使用来自onReceive()的计时器(或任何异步调用),因为该进程在onReceive()返回后终止。
正如@pskink提到的,BroadcastReceivers只打算是短暂的任务。也许你可以发布一些你的设计和你想做的事情,这样我们就可以更好地帮助你。
文档建议
对于运行时间较长的操作,您通常会将服务与BroadcastReceiver结合使用,以使包含进程在整个操作过程中始终处于活动状态
如果您确实实现了服务,则可以使用计时器来实现30秒的延迟。
发布于 2015-07-21 01:05:52
您可以在onReceive中使用view.postDelyed。例如
public void onReceive(...
mainView.postDelayed(new Runnable() {
@Override
public void run() {
setListRecipients(savedInstanceState.getStringArrayList(RECIPIENTS));
}
}, POST_DELAYED_TIME_IN_MILLISECONDS);https://stackoverflow.com/questions/31522087
复制相似问题