gpt4 book ai didi

Android:ContentResolver 实例是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 13:54:16 27 4
gpt4 key购买 nike

我们都知道 ContentResolver 查询不应该在 UI 线程上执行,但是,令人惊讶的是,我找不到关于 ContentResolver 类线程安全的信息官方文档。

我知道如何编写线程安全的 ContentProvider,我知道 SQLite 默认是线程安全的(它实现了内部锁定机制)。

但是,从多个线程使用单个 ContentResolver 实例是否安全(例如,两个线程调用 insert()query() 并行在同一个对象上)?

最佳答案

深入研究源代码,我们最终发现由 android 为应用程序创建的 ContentResolver 实例是 ApplicationContentResolver位于 ContentImpl 中的类。

从下面的代码 fragment 和 ContextResolver 的源代码中可以看出,没有状态变量。

 private static final class ApplicationContentResolver extends ContentResolver {
private final ActivityThread mMainThread;
private final UserHandle mUser;
public ApplicationContentResolver(
Context context, ActivityThread mainThread, UserHandle user) {
super(context);
mMainThread = Preconditions.checkNotNull(mainThread);
mUser = Preconditions.checkNotNull(user);
}
....

这必然意味着它是线程安全的。

关于Android:ContentResolver 实例是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407245/

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