Android:广播接收器时间限制

9

在BroadcastReceiver.onReceive方法中运行的操作是否有时间限制?


你说的时间限制是什么意思?通常情况下,BroadcastReceiver会立即接收广播... - Opiatefuchs
@Opiatefuchs,您可以在CommonsWare的回答中查看详细信息。 - VSB
1个回答

11

onReceive() 方法在主应用程序线程上调用,即驱动您的UI的相同线程。通常情况下,您希望 onReceive() 在不到一毫秒的时间内返回,以防止您的UI冻结(也称为 "jank"),特别是当您的UI在前台时。此外,在5-10秒后,Android将基本崩溃您的应用程序。

但是,您无法可靠地从onReceive()中派生一个后台线程,因为一旦onReceive()返回,如果您不在前台,则进程可能会被终止。

对于通过清单注册的接收器,一个典型的模式是让 onReceive() 委托工作给一个 IntentService,它有自己的后台线程,并且作为服务,告诉操作系统您的进程仍在执行某些工作,应该让您的进程运行更长时间。


1
根据我在这里查阅的资料,我们可以在广播接收器中调用goAsync()方法来执行长时间运行的后台任务。请问您对此有何看法? - VSB
1
@VSB:我宁愿使用IntentService方法。如果您需要确保设备在执行工作时保持唤醒状态,那么该模式涉及WakefulBroadcastReceiverIntentService。话虽如此,如果您愿意,也可以尝试使用goAsync() - CommonsWare
我从你的“Android编程教程”中学习了安卓。从那时起,我就一直在想这个时间限制的问题! - VSB
1
BroadcastReceiver委派工作到IntentService的优秀解决方案。 - Kushal
针对目标为Android 12或更高版本的应用程序,这是不可能的。Android系统限制了应用程序,不能从broadcastReceiver运行服务。应用程序应该运行一个加速工作。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接