5

我看到的如何制作 a 的示例ContentProvider都使用了UriMatcher#match(Uri)insertqueryupdate方法delete中的方法来轻松处理内容提供​​者响应的所有 URI 模式(例如:http: //developer.android.com/资源/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html)。直到今天,当我在ContentProviderAPI 文档中注意到insertqueryupdatedelete“可以 [all] 从多个线程调用”时,这对我来说似乎还可以。此外,UriMatcher文档没有说明线程安全或是否match可重入。

我是否需要担心在我的、、和的实现中使用match的共享static实例上的同步调用?UriMatcherinsertqueryupdatedelete

4

1 回答 1

6

查看的源代码UriMatcher,似乎多个线程可以同时调用该match方法,因为 的实现match只访问每个线程的变量uri(参数)、共享String的 s 和 an 的元素ArrayList<UriMatcher>(通过ArrayList#get(int),这是线程安全的)。

addURI不是线程安全的,因为它在结构上修改ArrayList. 它与读取相同,因此ArrayList在其他线程可能正在调用时无法调用。matchaddURImatch

于 2010-10-17T18:49:06.423 回答