【发布时间】:2019-11-23 13:35:28
【问题描述】:
我知道 Android 的 ContentProvider 以多进程/多线程的多次写入而闻名,而不会引发锁定异常。在多线程环境中,它可能已经使用读写锁同步了方法。但是,将创建多个对象的多进程呢?谁能让我在 ContenProvider 内部工作。
【问题讨论】:
标签: android sqlite android-sqlite android-contentprovider android-room
我知道 Android 的 ContentProvider 以多进程/多线程的多次写入而闻名,而不会引发锁定异常。在多线程环境中,它可能已经使用读写锁同步了方法。但是,将创建多个对象的多进程呢?谁能让我在 ContenProvider 内部工作。
【问题讨论】:
标签: android sqlite android-sqlite android-contentprovider android-room
ContentProvider 是一个清单声明的组件,它由操作系统实例化并与主进程绑定(除非属性process 指定不同)。因此,在该应用程序进程的生命周期内,仅创建声明的ContentProvider 的单个实例。希望与之交互的其他进程必须通过ContentResolver,而ContentResolver 又只与创建的单个提供程序进行通信。
请注意,当从另一个进程使用提供程序时,它通过 IPC(特别是通过 Binders)进行通信,这意味着在 IPC 调用期间将在 BinderThread 中调用提供程序的方法。有一个绑定线程池,因此可以与多个应用程序进行一些并发通信,这意味着应该进行适当的同步。
总之,内容提供者对于多进程和多线程交互是安全的,因为:
【讨论】: