出于某种原因,我需要多次注册到同一个接收器,如Manifest中的一个和代码中的一次。我想听包更改,即使应用程序没有运行但已安装。
1.在AndroidManifest.xml中
Error in .summary.object$coefficients : $ operator is invalid for atomic vectors
2.在代码中,我在构造函数中使用以下代码片段注册到BroadcastReceiver。
<receiver android:name="PackageChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
但不知怎的,Android只会在收到两者时间歇地收到其中一个。新版本中是否有任何文档,例如Android OS本身的性能改进,例如虽然多次注册但只收到一个广播。它是设备或操作系统或版本特定的东西吗?
答案 0 :(得分:1)
我找到了解决方案。棉花糖不允许多次注册到同一个广播接收器。但如果OS版本小于或等于LOLLIPOP_MR1,则可以容忍注册到同一广播接收器。 但由于Marshmallow(API 23)不允许这样做,我们可以做到这样的性能改进。
private static final boolean REGISTER_DUPLICATE_RECEIVER = VERSION.SDK_INT <= VERSION_CODES.LOLLIPOP_MR1;
if (REGISTER_DUPLICATE_RECEIVER) {
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
context.registerReceiver(this, filter);
}