BroadcastReceiver.getResultsExtra() 与 Intent.getExtras()
BroadcastReceiver.getResultsExtra() vs. Intent.getExtras()
在查看 Android 源代码时,我观察到两种获取包含结果额外数据的 Bundle 的常用方法。
一个。调用 getResultsExtra()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = getResultExtras(true);
}
}
乙。调用 intent.getExtras()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
}
}
为什么你会选择一种方法而不是另一种方法?在某些情况下,一种方法优于另一种方法吗?它们是等价的吗?
当您使用"Context.sendOrderedBroadcast"发送有序广播时,"BroadcastReceiver.getResultExtras"方法很有意义,因为您可以修改要发送到下一个广播接收器的结果集(记住,当您发送ordered broadcast, receivers 在同步 mather 中调用,而不是普通广播的异步 mather "Context.sendBroadcast")。考虑到这一点,假设您有 3 个接收者,并且您向它们发送了一个有序的广播(假设您将优先级设置为广播 1,然后是第一个),然后接收者 1 可以获得结果集 "BroadcastReceiver.getResultExtras" 方法并添加一些值,当广播到达接收者 2 时,这些值将被接收者 2 看到,依此类推。 "Intent.getExtras()" 只会为您提供广播接收器具有的 Intent 的额外值。
getResultExtras() 是这样使用的:
Bundle results = getResultExtras(true);
results.putString("someTag", "someValue");
在不同的接收者之间共享information/values
因此,如果您在某些 BroadcastReceiver 中输入一些值或更改从 getResultExtra() 返回的映射,它将根据 docs
发送到下一个接收器
Retrieve the current result extra data, as set by the previous receiver. Any changes you make to the returned Map will be propagated to the next receiver.
另一方面 intent.getExtras()
returns 在开始广播时使用 intent.putExtra()
在 intent extras 中设置的值,例如:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setAction("com.yourpackage.BroadcastReceiver");
intent.putExtra("someTag", "someValue");
sendBroadcast(intent);
在查看 Android 源代码时,我观察到两种获取包含结果额外数据的 Bundle 的常用方法。
一个。调用 getResultsExtra()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = getResultExtras(true);
}
}
乙。调用 intent.getExtras()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
}
}
为什么你会选择一种方法而不是另一种方法?在某些情况下,一种方法优于另一种方法吗?它们是等价的吗?
当您使用"Context.sendOrderedBroadcast"发送有序广播时,"BroadcastReceiver.getResultExtras"方法很有意义,因为您可以修改要发送到下一个广播接收器的结果集(记住,当您发送ordered broadcast, receivers 在同步 mather 中调用,而不是普通广播的异步 mather "Context.sendBroadcast")。考虑到这一点,假设您有 3 个接收者,并且您向它们发送了一个有序的广播(假设您将优先级设置为广播 1,然后是第一个),然后接收者 1 可以获得结果集 "BroadcastReceiver.getResultExtras" 方法并添加一些值,当广播到达接收者 2 时,这些值将被接收者 2 看到,依此类推。 "Intent.getExtras()" 只会为您提供广播接收器具有的 Intent 的额外值。
getResultExtras() 是这样使用的:
Bundle results = getResultExtras(true);
results.putString("someTag", "someValue");
在不同的接收者之间共享information/values
因此,如果您在某些 BroadcastReceiver 中输入一些值或更改从 getResultExtra() 返回的映射,它将根据 docs
发送到下一个接收器Retrieve the current result extra data, as set by the previous receiver. Any changes you make to the returned Map will be propagated to the next receiver.
另一方面 intent.getExtras()
returns 在开始广播时使用 intent.putExtra()
在 intent extras 中设置的值,例如:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setAction("com.yourpackage.BroadcastReceiver");
intent.putExtra("someTag", "someValue");
sendBroadcast(intent);