杀死应用<我的服务>(pid 1724)因为提供商<我的提供商>正处于死亡过程<我的应用>

Sur*_*esh 9 android

Provider在应用程序和应用程序更新提供程序数据中实现,并触发远程服务,该服务查询提供程序以检索存储的值.应用程序在某个时间后关闭但服务继续访问内容提供程序.在某些时候,引发了以下错误: logcat和远程服务崩溃了.

"杀死应用程序(pid 1724)因为提供者处于死亡过程中"

我搜索此错误,无法找到有关此错误发生原因的信息.

更新:在其中一个位置使用getApplicationContext返回的上下文而不是Service来获取内容解析器以查询内容提供者.它会导致任何问题吗?

Ole*_*ndr 7

长话短说

使用不稳定的ContentProviderClient。

这是其他作者的解释:https ://stackoverflow.com/a/33562256/87383

长读

面临同样的问题并通过以下方式解决(解决方法):

首先你应该了解ContentResolver.registerContentObserverContentResolver.query之间的区别

因此,ContentResolver.registerContentObserver只是将本地ContentObserver实例与ContentService连接起来。它是通过使用ContentObserver.Transport类实例(基本上是一个绑定器)创建一个“桥”并将其传递给 ContentService 来实现的。请参阅ContentObserver.getContentObserver()

为什么它很重要?因为这些观察者不是由ActivityManagerService管理(注册)的。

那么, ContentResolver.query方法有什么特别之处?要回答这个问题,我们必须看看ContentProviderClient。因为实际查询是通过ContentProviderClient实例执行的,该实例负责与远程ContentProvider联系。

ContentProviderClient 有两种“类型”——稳定的不稳定的不稳定的客户端由您的应用程序管理。但稳定的一个是由 Android 为您管理的,因此当应用程序停止时,ActivityManager 知道是时候杀死所有客户端了

有关不稳定内容提供商客户端的更多详细信息,请参阅此提交: https://android.googlesource.com/platform/frameworks/base/+/6ae8d1821822296df0606c9cd1c46708cc21cb58


Sur*_*esh 4

嗯,运气不好,到目前为止还没有答案。我上周就知道是什么原因导致了坠机!我想我应该在这里分享。

提供程序 P 在应用程序 A 中定义,该应用程序 A 具有服务 S1,该服务会因某种原因禁用该包并终止该包。现在有另一个应用程序 B 拥有服务 S2 并使用提供程序 P。在某个时刻,服务 S1 禁用应用程序 A 包的某些组件并杀死该进程,这使得提供程序找到连接到它的所有进程并杀死这些进程其一,这使得应用程序 B 运行的进程终止并出现错误“正在终止应用程序,因为提供程序正在终止进程。

将提供程序移至新应用程序解决了该问题,使其在自己的进程中运行解决了该问题。