ContentProvider 源码分析---之三

3, ContentProvider实现调用数据库的方法如下,ContentResolver resolver = getContentResolver();Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,•••实际步骤如下,1,调用getContentResolver方法获取ContextImpl的内部类Applic
摘要由CSDN通过智能技术生成

3, ContentProvider实现

调用数据库的方法如下,

ContentResolver resolver = getContentResolver();
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,•••

实际步骤如下,

1,调用getContentResolver方法获取ContextImpl的内部类ApplicationContentResolver对象;

2,通过ApplicationContentResolver对象获取目标ContentProvider的Transport对象(IContentProvider对象).

如果目标ContentProvider已启动,直接在AMS中的变量查询获取并返回;

如果目标ContentProvider未启动,但所在进程已创建,则安装ContentProvider;

如果目标ContentProvider所在进程未创建,则先创建进程。

3,通过IContentProvider对象调用增删改查方法。

insert/delete/update/query四个方法调用流程图完全相同,以delete为例论述,

客户端调用目标ContentProvider的delete方法其实就是Transport的delete方法,

Transport的delete方法调用流程图如下,


Transport的delete方法如下,

@Override
public int delete(String callingPkg, Uri uri, String selection, String[] selectionArgs) {
   validateIncomingUri(uri);
   uri = getUriWithoutUserId(uri);
   if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) {
       return 0;
   }
   final String original = setCallingPackage(callingPkg);
    try {
       return ContentProvider.this.delete(uri, selection, selectionArgs);
    } finally {
       setCallingPackage(original);
    }
}

ContentProvider的delete方法是一个抽象方法,由各个子类去实现,

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

这样,就调用到了ContentProvider的delete方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DocumentsUI 是 Android 系统自带的文件管理器,它的源码分析可以帮助我们更好地理解 Android 系统的文件管理机制以及 Android 应用的文件访问方式。 DocumentsUI 的源码主要分为以下几个部分: 1. `DocumentsActivity`:文件管理器的主界面,负责显示文件列表和管理文件操作。 2. `RootsFragment`:管理文件管理器中所有根目录(如本地存储、SD 卡等)的 Fragment。 3. `DirectoryFragment`:显示指定目录下的文件和文件夹列表的 Fragment。 4. `DocumentsAdapter`:文件列表的 Adapter,用于显示文件列表项。 5. `DocumentsProvider`:DocumentsUI 中文件访问的核心类,负责提供文件和文件夹的访问接口。 其中,`DocumentsProvider` 是最为核心的部分,它实现了 `ContentProvider` 接口,提供了文件和文件夹的访问接口。在 Android 系统中,应用通过 ContentResolver 访问 ContentProvider 提供的数据,DocumentsUI 利用这一特性,将文件访问接口封装成 ContentProvider 的形式,方便其他应用访问文件。 `DocumentsProvider` 的具体实现细节比较复杂,主要包括以下几个部分: 1. 鉴权机制:DocumentsProvider 会根据应用的 UID 和权限来判断是否有访问文件的权限。 2. 文件访问:DocumentsProvider 提供了一系列接口来访问文件和目录,包括查询、创建、删除、重命名、移动等操作。 3. 文件类型和 MIME 类型:DocumentsProvider 会根据文件的扩展名和内容类型来判断文件类型,并且根据文件类型返回对应的 MIME 类型。 总之,DocumentsUI 的源码分析可以帮助我们更好地了解 Android 文件管理系统的实现原理,并且为我们开发自己的文件管理器提供了参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值