我的应用程序在 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
我找到了一些删除数据库并使用 ContentProvider 重新创建它的解决方案。
ContentResolver resolver = mContext.getContentResolver();
ContentProviderClient client = resolver.acquireContentProviderClient(KOOPSContentProvider.AUTHORITY);
assert client != null;
KOOPSContentProvider provider = (KOOPSContentProvider) client.getLocalContentProvider();
assert provider != null;
provider.resetDatabase();
client.release();
Run Code Online (Sandbox Code Playgroud)
但在ContentProviderClient类已经release()被弃用,是否有任何其他的方式来释放资源。
编辑:如果我尝试使用close(),它显示如下警告。
This ContentProviderClient should be freed up after use with #release().许多资源,例如 TypedArrays、VelocityTrackers 等,在使用后应该回收(通过 recycle() 调用)。此 lint 检查查找丢失的 recycle() 调用。
和close()显示为禁用,为什么?
android android-contentresolver android-contentprovider contentproviderclient
android ×2