美文网首页 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