Android Dev Guide



通常,内容提供者用于向不同的应用程序提供数据或在它们之间共享数据。我想知道是否有私有(private)提供者有什么用,不想共享它。如果不提供对数据库或文件系统的直接访问,是否有任何好处?

谢谢,
拉贾特

最佳答案

  • 它会自动在后台线程中计划所有服务器端和同步数据库访问。但是,在您的应用程序前端中,默认情况下,内容解析器/提供程序通常会从UI线程执行查询/事务。您必须异步执行所有事务(即使用CursorLoader),以确保您的应用程序在用户界面侧顺利运行
  • 它将通过ContentProvider访问的所有线程本地化可重入数据库访问,以便所有锁定都可以完全在ContentProvider覆盖调用中进行,而不是在DB层,服务和UI层中对其进行跟踪。
  • 作为上面的一部分,它还为您的数据提供了一个不错的单例界面-如果您的应用中有十个Activity类,则只需对每个类进行ContentResolver静态调用,而无需处理打开/关闭SQLiteDatabase的问题在每个 Activity 中,当您从应用程序中的一个 Activity 跳转到另一个 Activity 时。
  • ContentProvider与SyncAdapter模型紧密地联系在一起-意味着,如果要使数据库与网络上的服务器托管数据库保持同步,这几乎是唯一的方法。 (您的应用程序反射(reflect)了REST API类型的情况)
  • 它与ContentResolver的ContentObserver接口(interface)相关联-这是一个接口(interface)(在许多其他有用的东西中), View 可以注册为观察特定数据集(通过Cursor到该数据)。然后,如果您对ContentProvider进行更改,则CP可以通知CR,CR可以依次通知任何相关的游标,游标随后将重新查询并导致 View 更新。这比手动跟踪 View 要干净得多,这样您就可以使它们无效并重新绘制它们。

  • 至于数据库的重入锁定,它并不能完全完成,但是它可以帮助您-ContentProvider类实现四个简单的函数(CRUD接口(interface)),并且,如果选择覆盖它,则可以实现第五个,即batchAdd()- -这可以使您的锁定本地化。最简单的答案是在功能级别简单地标记所有四个/五个“同步”的功能声明,您就完成了。比试图找出在5个不同Activites中访问数据库的20个位置进行锁定要干净得多。

    关于android - 私有(private)内容提供商的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5523511/

    10-11 22:26
    查看更多