ContentProvider

ContentProvider 管理对结构化数据集的访问。它们封装数据,并提供用于定义数据安全性的机制。 内容提供程序是连接一个进程中的数据与另一个进程中运行的代码的标准界面。

ContentProvider 无法被用户感知,对于一个 ContentProvider 组件来说,它的内部需要实现增删该查这四种操作,它的内部维持着一份数据集合,这个数据集合既可以是数据库实现,也可以是其他任何类型,如 List 和 Map,内部的 insert、delete、update、query 方法需要处理好线程同步,因为这几个方法是在 Binder 线程池中被调用的。

ContentProvider 通过 Binder 向其他组件乃至其他应用提供数据。当 ContentProvider 所在的进程启动时,ContentProvider 会同时启动并发布到 AMS 中,需要注意的是,这个时候 ContentProvider 的 onCreate 要先于 Application 的 onCreate 而执行

ContentProvider 和 sql 在实现上有什么区别?

  • ContentProvider 屏蔽了数据存储的细节,内部实现透明化,用户只需关心 uri 即可(是否匹配)

  • ContentProvider 能实现不同 app 的数据共享,sql 只能是自己程序才能访问

  • Contentprovider 还能增删本地的文件,xml等信息

数据存储

存储方式

说明

SharedPreferences

在键值对中存储私有原始数据

内部存储

在设备内存中存储私有数据

外部存储

在共享的外部存储中存储公共数据

SQLite 数据库

在私有数据库中存储结构化数据

内容提供者ContentProvider是系统专门提供不同应用进行数据共享的方式,需要注意的一些细节:CRUD操作、防止SQL注入和权限控制等。ContentProvider主要是以表格的形式来组织数据,虽然看起来很像数据库的样子,但其实具体实现没有要求,我们可以用SQLite数据库,也可以用文件,或者内存里面的对象。使用起来很简单,只需要继承ContentProvider,实现6个抽象方法就可以了:onCreate、query、updata、insert、delete、getType这六个。

class test extends ContentProvider{

    @Override

    public boolean onCreate() {

        return false;

    }

    @Nullable

    @Override

    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {

        return null;

    }

    @Nullable

    @Override

    public String getType(@NonNull Uri uri) {

        return null;

    }

    @Nullable

    @Override

    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {

        return null;

    }

    @Override

    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {

        return 0;

    }

    @Override

    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {

        return 0;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值