2

所以基本上我的应用程序中有两个主要功能,A 和 B,它们在启动时都会做一些事情。所以我做了两个BroadcastReceiver R1和R2,它们都接收BOOT_COMPLETED意图。R1 的逻辑相当复杂,处理功能 A。R2 的逻辑非常简单,处理 B。

我的问题是决定是否应该通过保留两个广播接收器并使它们中的每一个都监听 BOOT_COMPLETED 意图来保持代码更清洁,或者是否应该将它们结合起来以提高性能?

接收两个相同的意图而不是一个对性能的影响有多大?send-receive-intent 过程会在我的应用程序中发生一次或两次吗?

另外,只有在启动完全完成后,用户可以启动应用程序时才发送 BOOT_COMPLETED 吗?

编辑:经过测试,两个组件在同一个应用程序中接收相同意图与一个组件之间的差异大约只有几毫秒。

4

3 回答 3

4

您可以使用 android:priority 属性来控制这些接收器,并使它们按特定顺序执行。优先级最高的活动将首先执行。像这样的东西:

<activity
     android:name="First activity">
     <intent-filter android:priority="10" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

<activity
     android:name="Second activity">
     <intent-filter android:priority="1" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

您在此链接中有关于此的信息

android:priority 在处理过滤器描述的类型的意图方面应该给予父组件的优先级。此属性对活动和广播接收器都有意义:它提供了有关活动如何响应与过滤器匹配的意图的信息,相对于也可以响应该意图的其他活动。当一个意图可以由具有不同优先级的多个活动处理时,Android 将只考虑那些具有较高优先级值的活动作为该意图的潜在目标。它控制执行广播接收器以接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。(该顺序仅适用于同步消息;对于异步消息,它会被忽略。

该值必须是整数,例如“100”。数字越大优先级越高。默认值为 0。该值必须大于 -1000 且小于 1000。

另请参阅 setPriority()。

于 2013-01-23T10:03:29.863 回答
3

除了山姆的回答...

另外,只有在启动完全完成后,用户可以启动应用程序时才发送 BOOT_COMPLETED 吗?

它在键盘保护出现时发送。关键是“时间”。启动时接收器有很多,它们都会以不确定的顺序接收广播。请不要对您将获得广播的准确时间或当时系统的准确状态做任何假设(例如,可能没有互联网连接)。

于 2012-08-24T00:01:10.993 回答
1

广播接收器本质上独立于任何活动。

  • 如果 Activity A 和 Activity B 是同一个应用程序的一部分,我建议将它们结合起来并仅使用一个 BroadcastReceiver。
  • 如果它们用于不同的应用程序并且您计划单独发布应用程序,那么它们应该仍然是两个不同的实体。
于 2012-08-23T23:49:53.627 回答