android - 拥有 ContentProvider 的进程中的异常崩溃使用 ContentProvider 的进程
问题描述
我有两个应用程序。我们称它们为 DataSource 和 QueryApp。
DataSource 应用程序导出 ContentProvider。
<provider
android:name="com.example.ContentProvider"
android:authorities="${applicationId}"
android:exported="true"
android:readPermission="${applicationId}.read" />
QueryApp 使用来自 DataSource 的 ContentProvider:
context.contentResolver.acquireContentProviderClient(uri)?.use { contentProviderClient ->
contentProviderClient.query(uri, null, null, null, null)?.use { cursor ->
... do something with the cursor ...
}
}
问题是如果DataSource进程在执行请求的初始化过程中崩溃了,QueryApp进程也会崩溃。而且我无法捕捉到异常。
在 QueryApp 进程内部,调用 时acquireContentProviderClient(uri)
,会收到远程异常:
E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.lang.ExceptionInInitializerError
...
E/AndroidRuntime: FATAL EXCEPTION: Binder:6230_3
Process: com.example.datasource, PID: 6230
java.lang.ExceptionInInitializerError
该异常归因于 DataSource 进程。QueryApp 进程也不例外。然后两个进程都崩溃了。
我试过捕捉错误,但它不起作用:
try {
context.contentResolver.acquireContentProviderClient(uri)?.use { contentProviderClient ->
contentProviderClient.query(uri, null, null, null, null)?.use { cursor ->
... do something with the cursor ...
}
}
} catch (e: Error) {
/* we won't reach this line */
}
我试过设置 UncaughtExceptionHandler 但它也不起作用:
// This is the Thread that we are going to make query on
Thread(it, "SafeContentProviderThread").apply {
setUncaughtExceptionHandler { t, e ->
Log.e("Uncaught exception caught and swallowed")
}
}
我可以捕获错误并防止 QueryApp 进程崩溃吗?
解决方案
推荐阅读
- r - 在数据框R中添加带有条件的递归数
- python - 日期时间pyplot错误TypeError中熊猫系列的错误concat:float()参数必须是字符串或数字,而不是'Timestamp',,
- javascript - 在 Angular 中添加/删除/编辑列表项时自动更新视图
- python - 集成终端VSCode:显示路径但不输出
- sqlite - SQL多对多查询选择用户好友
- wordpress - 从本地迁移到实时 wordpress 需要新安装
- react-native - 是否存在使 Ionicons 有一些新闻反馈的属性?
- python - TypeError: __init__() 得到了一个意外的关键字参数“n_folds”
- python - 'NoneType' 对象在 ```cv2_imshow()``` 中没有属性 'clip' 错误
- python - 指定 URL 时应用程序路由不起作用(Python Flask)