ContentProvider原理分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ContentProvider原理分析相关的知识,希望对你有一定的参考价值。

参考技术A 前景知识:对于ContentProvider理解必须对IBinder有所了解(一个提供跨进程信息交换的一个工具),会ContentProvider的简单使用。本文是基于你已经具备以上知识点阅读

为了方便讲解定义几个名词
Provider:ContentProvider内容提供端
Client:通过URL获取信息端

Provider提供端继承ContentProvider 实现query,insert等方法

Client端使用

ContentProvider的使用还是非常的简单方便的。

下面我们按照getContentResolver().query(nameUri, new String[]"_id", "name", null, null, null);熟悉一下上面过程
getContentResolver()得到的ApplicationContentResolver 这个过程在Client 的Application创建的时候就已经存在了

在获取IContentProvider 用了三个方法,类似我们图片缓存机制一样
IContentProvider unstableProvider = acquireUnstableProvider(uri);
unstableProviderDied(unstableProvider);
stableProvider = acquireProvider(uri);
这里我们只关注 acquireProvider(uri);

ActivityManagerNative.getDefault()也是通过IBinder机制通信的,其实他真正是ActivityManagerProxy与之通信的是ActivityManagerService.java(在System Service进程中运行),ApplicationContentResolver 去获得ContentProviderProxy本身也是跨进程通信,client端和System service通信,从System service中获得到ContentProviderProxy
下面是在ActivityManagerService.java中getContentProvider的实现

源码是基于android 6.0
源码分析https://blog.csdn.net/u010961631/article/details/14227421
Android ContentProviderhttps://developer.android.com/reference/android/content/ContentProvider.html

以上是关于ContentProvider原理分析的主要内容,如果未能解决你的问题,请参考以下文章

ContentProvider openFile接口目录遍历漏洞

ContentProvider原理分析

Android组件系列----ContentProvider内容提供者

ContentProvider(联系人) - 没有这样的列:metadata_dirty

ContentProvider学习笔记

ContentProvider的启动流程分析