如何创建一个线程安全的ContentProvider?

kak*_*ppa 12 android android-contentprovider

Android文档说

可以从不同进程和线程中的各种ContentResolver对象调用ContentProvider方法,它们必须以线程安全的方式实现

我在Stackoverflow上发现了这篇文章 - sqlite内容提供程序和多线程 ,它说它已经是线程安全了吗?

那么,只是想知道如何创建一个线程安全的ContentProvider?如果我进行插入/更新/删除方法就足够了syncronized

public synchronized Uri insert (Uri uri, ContentValues values) {

}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ood 13

你可以制作每一种方法synchronized,但在你做之前确保它是绝对必要的.如果底层数据源已经是线程安全的,那么这些方法synchronized可能成本很高.有关详细信息,请参阅我关于此主题的博客文章.

  • @JPM是的,你是对的.如果您使用`SQLiteDatabase`作为底层源,这应该无关紧要(`SQLiteDatabase`是线程安全的).除此之外,没有任何保证......您必须同步数据源或同步访问`ContentProvider`(我建议前者). (4认同)
  • @JPM(对你的第一条评论的回复很晚)如果你只是将`synchronized`关键字添加到`update`和`delete`方法,两种方法都会尝试获取同一对象的锁(ContentProvider)和因此它们也不会同时执行. (2认同)