【问题标题】:Multiple write from multiple process in Android Content providerAndroid内容提供程序中多个进程的多次写入
【发布时间】:2019-11-23 13:35:28
【问题描述】:

我知道 Android 的 ContentProvider 以多进程/多线程的多次写入而闻名,而不会引发锁定异常。在多线程环境中,它可能已经使用读写锁同步了方法。但是,将创建多个对象的多进程呢?谁能让我在 ContenProvider 内部工作。

【问题讨论】:

    标签: android sqlite android-sqlite android-contentprovider android-room


    【解决方案1】:

    ContentProvider 是一个清单声明的组件,它由操作系统实例化并与主进程绑定(除非属性process 指定不同)。因此,在该应用程序进程的生命周期内,仅创建声明的ContentProvider 的单个实例。希望与之交互的其他进程必须通过ContentResolver,而ContentResolver 又只与创建的单个提供程序进行通信。

    请注意,当从另一个进程使用提供程序时,它通过 IPC(特别是通过 Binders)进行通信,这意味着在 IPC 调用期间将在 BinderThread 中调用提供程序的方法。有一个绑定线程池,因此可以与多个应用程序进行一些并发通信,这意味着应该进行适当的同步。

    总之,内容提供者对于多进程和多线程交互是安全的,因为:

    1. 他们是单身人士。
    2. 多线程安全由开发人员通过适当的共享状态同步来保证。
    3. ContentProvider 保证多进程安全。
    4. ContentProvider 的定义具有适合 IPC 交互的返回类型。 (它们是 Parcelable,例如 AssetFileDescriptor,或者它们是由使用 ashmem 分配的共享内存支持的 SQLiteCursor

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多