私人内容提供商有什么用?

raj*_*ath 43 android data-storage android-contentprovider

Android Dev Guide

内容提供程序对于读取和写入应用程序专用但不共享的数据也很有用.

通常,内容提供商用于向不同的应用程序提供数据或在它们之间共享数据.我想知道私人提供商是否有任何用处并且不想分享它.如果没有提供直接访问数据库或文件系统的权限,是否有任何好处?

谢谢,拉贾斯

jcw*_*ger 78

  1. 它会在后台线程中自动调度所有服务器端和同步数据库访问.但是,在应用程序前端中,内容解析器/提供程序通常会默认从UI线程执行查询/事务.您必须异步执行所有事务(即使用a CursorLoader)以确保您的应用程序在UI端平稳运行
  2. 它从可以访问的任何线程本地化重入数据库访问ContentProvider,这样所有锁定都可以完全在您的ContentProvider覆盖调用中发生,而不是在数据库层,服务和UI层中跟踪它.
  3. 作为上述内容的一部分,它还为您的数据提供了一个很好的单例接口 - 如果您的应用程序中有10个Activity类,您只需要通过每个的ContentResolver静态调用,而不是需要处理打开/关闭SQLiteDatabase的问题.当您在应用中从一个活动跳转到另一个活动时,每个活动.
  4. ContentProvider与SyncAdapter模型紧密相关 - 这意味着如果您想让数据库与网络上的服务器托管数据库保持同步,这几乎是唯一的方法.(您的应用镜像REST api类型的情况)
  5. 它与ContentResolver的ContentObserver接口相关联 - 这是一个接口,其中(在许多其他有用的东西中)视图可以注册为观察一组特定的数据(通过Cursor到该数据).然后,如果您将更改驱动到ContentProvider,则CP可以通知CR,CR又可以通知任何相关游标,而游标又会重新查询并导致视图更新.这比必须手动跟踪您的视图更清晰,因此您可以使它们无效并重绘它们.

至于数据库的重入锁,它不会做它彻底,但它可以帮助 - 你ContentProvider类实现四个简单的功能(CRUD接口),如果您选择覆盖它,第五,batchAdd() - - 这会使您的锁定本地化.骨简单的答案就是简单地在功能级别标记所有四个/五个功能声明"synchronized"并完成.比试图从5个不同的活动中访问数据库的20个地方找出锁定要清楚得多.

  • 谢谢jcwenger,花时间把它们列好.这是非常有用的信息. (2认同)