对于android应用程序,我需要在onReceive方法启动后进入睡眠状态。onReceive最大线程睡眠
通过实验,我发现我可以做一个Thread.sleep为< 20秒。但是,我需要睡30秒以上。一次接一次地睡觉不会有帮助(六次5秒钟睡眠)。
(是的,我知道我不应该在UI线程中这样做,它不是UI线程)。
关于为什么onreceive有最大的Thread.sleep以及如何解决这个问题的任何想法?
对于android应用程序,我需要在onReceive方法启动后进入睡眠状态。onReceive最大线程睡眠
通过实验,我发现我可以做一个Thread.sleep为< 20秒。但是,我需要睡30秒以上。一次接一次地睡觉不会有帮助(六次5秒钟睡眠)。
(是的,我知道我不应该在UI线程中这样做,它不是UI线程)。
关于为什么onreceive有最大的Thread.sleep以及如何解决这个问题的任何想法?
对于调度未来事件,最好使用Timer而不是Thread.sleep()。您不能使用onReceive()中的Timer(或任何异步调用),因为该过程在onReceive()返回后终止。
正如@pskink提到的,BroadcastReceivers只能用于短期任务。也许你可以发布一些你的设计和你想做的事情,这样我们可以更好地帮助你。
该文档建议
更长的运行操作,你会经常一起使用的服务以及广播接收器,以保持包含过程积极为您的操作
的整个时间如果做一个服务,你可以使用Timer来实现30秒的延迟。
您可以在onReceive中使用view.postDelyed
。例如
public void onReceive(...
mainView.postDelayed(new Runnable() {
@Override
public void run() {
setListRecipients(savedInstanceState.getStringArrayList(RECIPIENTS));
}
}, POST_DELAYED_TIME_IN_MILLISECONDS);
阅读'BroadcastReceiver'文档:*“一个BroadcastReceiver对象仅适用于呼叫的持续时间的onReceive(上下文,意图)。一旦这个函数代码返回时,系统考虑的对象这会对onreceive(Context,Intent)实现中的作用产生重要影响:任何需要** asynchronous **操作的操作都是**不可用**,因为您需要从处理异步操作的功能,但此时BroadcastReceiver不再处于活动状态,因此系统是...“* – pskink