105

sendStickyBroadcastAndroid和Android有什么区别sendBroadcast

4

3 回答 3

120

这是 Android SDK 所说的sendStickyBroadcast()

执行一个“粘性”的 sendBroadcast(Intent),这意味着您发送的 Intent 在广播完成后仍然存在,以便其他人可以通过 registerReceiver(BroadcastReceiver, IntentFilter) 的返回值快速检索该数据。在所有其他方面,这与 sendBroadcast(Intent) 的行为相同。

通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED. 当你要求registerReceiver()那个动作时——即使有一个null BroadcastReceiver——你会得到Intent最后一次广播的那个动作。因此,您可以使用它来查找电池的状态,而不必注册电池中所有未来的状态变化。

于 2010-04-06T12:22:57.050 回答
56

类型:- 本地、普通、有序和粘性

正常广播

:- 使用 sendBroadcast()

:- 异步广播

:- 任何接收者都接收到广播而不是任何特定的顺序

有序广播

:- 使用 sendOrderedBroadcast()

:- 同步广播

:- 接收者在优先级基础中接收广播

:- 我们也可以简单地中止这种类型的广播

本地广播

:- 仅在仅在同一进程内使用广播时使用

粘性广播

:- 正常的广播意图在系统发送和处理后不再可用。

:- 使用 sendStickyBroadcast(Intent)

:- 相应的意图是粘性的,这意味着您发送的意图在广播完成后仍然存在。

:- 因此,其他人可以通过 registerReceiver(BroadcastReceiver, IntentFilter) 的返回值快速检索该数据。

:- 除了这与 sendBroadcast(Intent) 相同。

于 2014-02-17T12:36:06.053 回答
10

sendbroadcast()- 正常广播,但我们也可以设置优先级。

sendstickybroadcast()- 通过此传递的意图将适用于通过代码注册的未来用户(动态接收器)。将坚持使用 android 的广播,并将重新交付或重新广播到来自任何广播接收器的未来请求

当有人使用发送粘性广播时sendstickyBroadcast(intent);,该广播将可供使用动态接收器的未来用户使用。

但是现在你不应该使用 sendStickyBroadcast()它已被弃用的方法

来自 Android 文档:

此方法在 API 级别 21 中已弃用。不应使用粘性广播。它们不提供安全性(任何人都可以访问它们)、不提供保护(任何人都可以修改它们)以及许多其他问题。推荐的模式是使用非粘性广播来报告发生了变化,并使用另一种机制让应用程序在需要时检索当前值

我希望这有帮助。

于 2015-12-21T12:16:18.833 回答