我在服务中的线程池中有一个线程,它可以做很多事情。最后,它将一些数据插入提供程序并发送广播以通知 GUI 有关新数据的信息。
经常发送和接收 1-3 个广播,然后不再接收广播。当我查看线程堆栈跟踪时,所有线程都位于 sendBroadcast 的系统方法中。
Stacktrace 从不返回线程:
BinderProxy.transact(int, Parcel, Parcel, int) line: 不可用 [native method]
ActivityManagerProxy.getProviderMimeType(Uri) line: 3296
ContextImpl$ApplicationContentResolver(ContentResolver).getType(Uri) line: 231
Intent.resolveType(ContentResolver) line :3754
Intent.resolveTypeIfNeeded(ContentResolver)行:3776
ContextImpl.sendBroadcast(Intent)行:969
Application(ContextWrapper).sendBroadcast(Intent)行:301
接收者注册:
<receiver android:name=".gui.MeasurementReceiver">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="content" android:host="compy.product.providers.measurement"/>
</intent-filter>
</receiver>
广播发送:
context.sendBroadcast(new Intent(android.content.Intent.ACTION_VIEW).
setData(Uri.withAppendedPath(compy.content.Intent.URI_channel, ""+id )));
现在对于真正有趣的部分,上述工作在带有 ICS 的 Galaxy Nexus 和 Galaxy Note pre ICS 上没有任何问题。但在带有 ICS 的 Galaxy Note、Galaxy SII 和 Galaxy SIII 上以上述方式失败。
在 Galaxy Nexus 上可能相关的注释上,提供程序启动一次或两次。在有问题的手机上,它开始处理所有查询。我们也没有找到这种行为的任何原因。
有任何想法吗?