在BroadcastReceiver.onReceive方法中运行的操作是否有时间限制?
在BroadcastReceiver.onReceive方法中运行的操作是否有时间限制?
onReceive()
方法在主应用程序线程上调用,即驱动您的UI的相同线程。通常情况下,您希望 onReceive()
在不到一毫秒的时间内返回,以防止您的UI冻结(也称为 "jank"),特别是当您的UI在前台时。此外,在5-10秒后,Android将基本崩溃您的应用程序。
但是,您无法可靠地从onReceive()
中派生一个后台线程,因为一旦onReceive()
返回,如果您不在前台,则进程可能会被终止。
对于通过清单注册的接收器,一个典型的模式是让 onReceive()
委托工作给一个 IntentService
,它有自己的后台线程,并且作为服务,告诉操作系统您的进程仍在执行某些工作,应该让您的进程运行更长时间。
IntentService
方法。如果您需要确保设备在执行工作时保持唤醒状态,那么该模式涉及WakefulBroadcastReceiver
和IntentService
。话虽如此,如果您愿意,也可以尝试使用goAsync()
。 - CommonsWareBroadcastReceiver
委派工作到IntentService
的优秀解决方案。 - Kushal