我的应用程序在 Process1 中运行,并且我正在使用在 Process2 下运行的另一个应用程序提供的内容提供程序。当 Process2 终止时,会导致在 Process1 下运行的我的应用程序被终止。
09-14 23:31:52.583 782 1351 I ActivityManager: Killing 11797:com.example.myapp/1000 (adj 100): depends on provider com.example.exampleapp/com.example.exampleapp.MyContentProvider in dying proc com.example.exampleapp (adj 100)
09-14 23:31:52.585 782 812 W libprocessgroup: kill(-11797, 9) failed: No such process
09-14 23:31:52.585 782 812 I libprocessgroup: Successfully killed process cgroup uid 1000 pid 11797 in 0ms
09-14 23:31:52.623 368 368 I Zygote : Process 11797 exited due to signal (9)
Run Code Online (Sandbox Code Playgroud)
我在 SO 中遇到了这个很好的答案,它基本上解释了当我们对内容提供商进行内容观察者与查询时会发生什么。
但我不清楚为什么 android 会杀死整个过程。为什么不能在应用程序级别处理这个问题,DeadObjectException …
android android-contentprovider contentobserver android-activitymanager contentproviderclient
如何使用ContentProviderClient与ContentResolver#acquireContentProviderClient(...)任何不同的获得ContentResolver#acquireUnstableContentProviderClient(...)?
似乎无论我使用哪种方法,我都会编写相同的代码。如果获取的 ContentProvider 消失并且我使用非不稳定方法获取客户端,我的应用程序中是否会出现某种泄漏?
所以我猜如果你想使用的 ContentProvider 在同一个进程中运行或者它正在运行,system_server那么你可以继续使用 stable 方法获取客户端,否则你应该使用不稳定的方法以防其他进程崩溃或者托管 ContentProvider 的应用程序在您使用它时被卸载/重新安装。但这让我问,使用稳定版本的获取方法是否有某种优势,为什么不总是使用不稳定版本的方法以防万一?
当他们说以下内容时,他们究竟是什么意思?
如果该内容提供者的进程消失,这将关闭平台中的机制清理依赖于该内容提供者的进程。
android ×2