1

我在服务中的线程池中有一个线程,它可以做很多事情。最后,它将一些数据插入提供程序并发送广播以通知 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 上可能相关的注释上,提供程序启动一次或两次。在有问题的手机上,它开始处理所有查询。我们也没有找到这种行为的任何原因。

有任何想法吗?

4

1 回答 1

1

好吧,事实证明这真的很简单......

我们在 Mainfest 文件中双重注册了 ContentProvider ......

因此,如果您有疯狂的错误,请检查您的清单。我不知道为什么会破坏广播。

更多信息(编辑):

在大多数情况下,您尝试对 Provider 进行操作时,LogCat 中的“Loading Provider 'your class name'”是这个问题的提示。否则,这似乎是一条非常罕见的消息。我们只在网上找到了一些对它的引用。

所以最后的相关说明是最重要的......

于 2012-06-26T16:20:54.247 回答