我对内容提供商有点困惑。
如果我的应用程序中有多个活动,它们是否都会获得自己的内容提供程序实例?它本质上只是一个类/接口?
在一项活动中,我将有许多线程同时写入数据库。如何处理允许一个线程一次写入的问题?
我是否只是捕获 SQLiteDatabaseLockedException,让线程休眠然后重试?
或者,还有更好的方法?
当活动暂停/被销毁时,数据库锁是否会被释放?如果是这样,我可以针对内容提供者本身创建一个同步锁吗?
如果您直接使用数据库并且有来自不同线程的多个编写器,则可能会遇到并发问题。
The ContentProvider
可以同时从多个程序访问,因此必须实现线程安全的访问。最简单的方法是使用关键字synchronized
在所有方法前面ContentProvider
,这样同一时间只有一个线程可以访问这些方法。
如果您不要求Android同步数据访问ContentProvider
,设置android:multiprocess=true
属性在你的<provider>
AndroidManifest.xml 文件中的定义。这允许在每个客户端进程中创建提供程序的实例,从而无需执行进程间通信 (IPC)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)