zoukankan      html  css  js  c++  java
  • ContentProvider要点复习

    ContentProvider要点复习

    ContentProvider作为四大组件之一,发挥着举足轻重的作用。与之相关联的另外两个类分别是ContentResolver和ContentObserver。

    ContentProvider

    内容提供者,暴露数据和操作数据的方法给外界,如联系人、短信、多媒体等数据库中的数据,是一种数据共享的方法。

    使用ContentProvider需要继承该类并注册在清单文件,并且指明其authorities属性以指定外界的访问“路径”,exported属性指定是否暴露出去。

    继承之后需要复写onCreate insert delete update query 等方法。其中Uri是的格式可以是

    content://<authorities>/<资源>/<ID>
    

    Android提供了管理URI的工具类UriMatcher和ContentUris。UriMatcher提供了两个常用的方法void addURI(String autority, String path, int code),int match()。ContentUris提供了withAppendedId(Uri id),paresId(uri)。

    ContentProvider的生命周期只有一个方法onCreate,并且只有在第一次访问时会被回调。

    ContentResolver

    Context中提供了getContentResolver()方法获取ContentResolver实例,然后让调用该实例的query insert等方法进行操作,会调用到相应内容提供者的相应的方法。

    ContentObserver

    内容观察者,当其监听的数据发生改变的时候,会回调其中的onChange方法进行相应操作的处理。

    getContentResolver().registerContentObserver(uri, new ContentObserver{
        public void onChange(boolean selfChange){
    	    // xxx
        }
    });
    

    在应用层中对该组件的使用较少,也更少会用三方应用让自己的数据暴露出去。在系统层中,对内容观察者的使用不在少数,比如在设置中打开或关闭了某个开关,可能只是会更改数据库中的一个值,而并不调用framework提供的接口,然后在framework中会监听该值的变化,然后从数据库中将该值获取,然后再进行其他操作。

  • 相关阅读:
    php.h: No such file or directory
    检查日期是否为节假日api
    Linux下实现秒级的crontab定时任务
    Apache 两种mpm prefork 和 worker 的区别
    centos6 安装mysql报错Requires: libc.so.6(GLIBC_2.14)
    Yii2 高级模板添加更多Application
    Yii2 assets注册的css样式文件没有加载
    Yii rbac原理和实践
    Yii2 ActiveRecord save失败
    Yii2 手动安装yii2-imagine插件
  • 原文地址:https://www.cnblogs.com/hackerkevin/p/4743613.html
Copyright © 2011-2022 走看看