gpt4 book ai didi

android - 来自 ThreadPool 线程的 SendBroadcast 阻塞调用

转载 作者:行者123 更新时间:2023-11-30 04:08:42 30 4
gpt4 key购买 nike

我在服务中的线程池中有一个线程可以做很多事情。最后,它将一些数据插入提供程序并发送广播以通知 GUI 有关新数据的信息。

经常发送和接收 1-3 个广播,然后不再接收广播。当我查看线程堆栈跟踪时,它们都位于 sendBroadcast 的系统方法中。

永不返回线程的堆栈跟踪:

BinderProxy.transact(int, Parcel, Parcel, int) line: not available [native method]
ActivityManagerProxy.getProviderMimeType(Uri) line: 3296
ContextImpl$ApplicationContentResolver(ContentResolver).getType(Uri) line: 231
Intent.resolveType(ContentResolver) line: 3754
Intent.resolveTypeIfNeeded(ContentResolver) line: 3776
ContextImpl.sendBroadcast(Intent) line: 969
Application(ContextWrapper).sendBroadcast(Intent) line: 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 上可能相关的注释中,提供程序启动一次或两次。在有问题的手机上,所有查询都已开始。我们也没有找到这种行为的任何原因。

有什么想法吗?

最佳答案

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

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

所以如果你有疯狂的错误检查你的 list 。我不知道为什么会中断广播。

更多信息(编辑):

在大多数情况下,当您尝试对 Provider 执行操作时,LogCat 中的“Loading Provider 'your class name'”是此问题的一个明显特征。否则这似乎是一个非常罕见的消息。我们只在网上找到了一些关于它的引用资料。

所以最后相关的笔记才是最重要的....

关于android - 来自 ThreadPool 线程的 SendBroadcast 阻塞调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190462/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com