码迷,mamicode.com
首页 > 其他好文 > 详细

王立平--ContentResolver与ContentProvider

时间:2014-09-30 15:14:19      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:contentprovider   contentresolver   android   

<span style="font-size:18px;">
</span>

应用程序之间唯一共享数据的方法

ContentProvider:负责组织数据,并把数据暴露出去

  暴露数据就像是暴露了一个数据库,外界访问其中的数据类似于访问数据库表的数据。

只是用URI来表示访问外界的“数据库”,有android底层实现URI与哪个数据库对应。我们只需要知道访问特定数据的URI即可。

ContentProvider向外界提供数据操作的接口:
query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])

可能会有多个程序同时通过ContentResolver访问一个ContentProvider,可能导致像数据库那样的“脏数据”。 因此,,在AndroidManifest.XML中定义ContentProvider的时候,需要考虑是<provider>元素multiprocess属性的值;另外一方面Android在ContentResolver中提供了notifyChange()接口,在数据改变时会通知其他ContentObserver,这个地方应该使用了观察者模式,在ContentResolver中应该有一些类似register,unregister的接口。

ContentResolver:获取ContentProvider暴露的数据,对数据进行操作

 查询Content Provider的方法有两个:ContentResolver的query() 和 Activity 对象的 managedQuery(),二者接收的参数均相同,返回的都是Cursor 对象,唯一不同的是 使用managedQuery 方法可以让Activity 来管理 Cursor 的生命周期。
    被管理的Cursor 会在 Activity进入暂停状态的时候调用自己的 deactivate 方法自行卸载,而在Activity回到运行状态时会调用自己的requery 方法重新查询生成的Cursor对象。如果一个未被管理的Cursor对象想被Activity管理,可以调用Activity的 startManagingCursor方法来实现。

 ContentResolver resolver=context.getContentResolver();
  Cursor cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
  null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);



王立平--ContentResolver与ContentProvider

标签:contentprovider   contentresolver   android   

原文地址:http://blog.csdn.net/u013425527/article/details/39694277

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!