美文网首页 Android知识点
Android知识点复习4(ContentProvider)

Android知识点复习4(ContentProvider)

作者: WeakRefrence | 来源:发表于2018-02-06 16:00 被阅读3次
ContentProvider:内容提供者,进程间 进行数据交互 、共享、跨进程通信

ContentProvider 以表的形式将数据呈现给外部应用和其他进程,类似数据库的形式(当一个APP单一的进程占用内存过高是否考虑把一些功能,例如视频播放、乐音播放等功能放到另一个进程中)。

1.ContentProvider基本操作
// 外部进程向 ContentProvider 中添加数据
public Uri insert(Uri uri, ContentValues values) 
// 外部进程 删除 ContentProvider 中的数据 
public int delete(Uri uri, String selection, String[] selectionArgs) 
// 外部进程更新 ContentProvider 中的数据
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
// 外部应用 获取 ContentProvider 中的数据 
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
// ContentProvider创建后 或 打开系统后其它进程第一次访问该ContentProvider时 由系统进行调用 
public boolean onCreate() 
// 得到数据类型,即返回当前 Url 所代表数据的MIME类型
 public String getType(Uri uri) 
2.ContentProvider的几个东西
  • 在系统中注册读内容提供者的权限
<permission
    android:name="xxxxx.xxxx.permission.READ_CONTENT"    //指定权限的名称
    android:label="Permission for read content provider"
    android:protectionLevel="normal"    
    />
Uri uri = Uri.parse("content://xxxxx.xxxx./User/123") 
3.ContentResolver(ContentProvider集群?代理?)

管理不同 ContentProvider,直接通过不同的URI操作不同的ContentProvider中的表

  • ContentResolver基本操作
// 获得ContentResolver
context.getContentResolver(); 
// 外部进程向 ContentProvider 中添加数据 
public Uri insert(Uri uri, ContentValues values)  
// 外部进程 删除 ContentProvider 中的数据 
public int delete(Uri uri, String selection, String[] selectionArgs) 
// 外部进程更新 ContentProvider 中的数据 
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)  
// 外部应用 获取 ContentProvider 中的数据 
public Cursor query(Uri uri, String[] projection, 
4.ContentUris类(操作Uril)

基本操作

//Uri追加ID
withAppendedId()
//Uri获取ID
parseId()
5.UriMatcher类(匹配Uri)

基本操作

//普通的初始化一下
 UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
 matcher.addURI("xx.xx.xx", "uzi1", 1); 
 matcher.addURI("xx.xx.xx", "uzi2", 2); 
//若 uri 为 :"content://xx.xx.xx/uzi1";
 matcher.match(uri) = 1;
//若 uri 为 :"content://xx.xx.xx/uzi2";
 matcher.match(uri) = 2;
6.ContentObserver类(内容观察者)

当ContentProvider 中的数据发生变化(增、删 、改)时,就会触发 ContentObserver类

// 注册内容观察者
ContentObserver getContentResolver().registerContentObserver(uri); 
// 通知变化
public class UserContentProvider extends ContentProvider { 
  public Uri insert(Uri uri, ContentValues values) { 
     getContext().getContentResolver().notifyChange(uri, null);
  } 
 } 
// 注销观察者 
getContentResolver().unregisterContentObserver(uri);

实践博文推荐:https://www.cnblogs.com/mauiie/p/3737868.html

相关文章

网友评论

    本文标题:Android知识点复习4(ContentProvider)

    本文链接:https://www.haomeiwen.com/subject/etygzxtx.html