【问题标题】:Android: BroadcastReceiver Time limitAndroid:BroadcastReceiver 时间限制
【发布时间】:2016-08-08 13:21:16
【问题描述】:

是否为在 BroadcastReceiver.onReceive 方法中运行的操作定义了任何时间限制?

【问题讨论】:

  • 时间限制是什么意思?通常 BoradcastReceivers 会立即收到广播...
  • @Opiatefuchs 您可以在 CommonsWare 答案中查看详细信息。

标签: android broadcastreceiver limits


【解决方案1】:

onReceive() 在主应用程序线程上调用,与驱动 UI 的线程相同。通常,您希望onReceive() 在不到一毫秒的时间内返回,以防您的 UI 在前台,因此您不会冻结 UI(也就是“卡顿”)。还有一个 5-10 秒的限制,超过这个时间 Android 基本上会让你的应用崩溃。

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

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

【讨论】:

  • 当我检查here 时,我们可以调用 goAsync() 方法在广播接收器中执行长时间运行的后台任务。我可以对此发表评论吗?
  • @VSB:我宁愿使用IntentService 方法。如果您需要确保设备在您工作时保持唤醒,则尤其如此,因为该模式涉及WakefulBroadcastReceiverIntentService。话虽如此,如果您愿意,欢迎您尝试goAsync()
  • 我从你的Android Programming Tutorials 学了android。从那时起,我对这个时间限制有了一些想法!
  • BroadcastReceiver委派工作到IntentService的出色解决方案
猜你喜欢
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2015-01-12
  • 2014-03-27
相关资源
最近更新 更多