前言
本文代码基于 Android S 。
概述
ContentResolver 查找对应 URI 的 ContentProvider 步骤简单概要为:
- ContentProvider 的提供方在其 AndroidManifest 中注册 authority;
- AMS 缓存各个 userId 对应的 [authority, IContentProvider];
- ContentResolver 从 URI 中取出其 authority 并在 AMS 中获取对应的 IContentProvider。
ContentProvider 提供方注册 authority
![](https://img.haomeiwen.com/i19729408/e70b0b9a2202232c.png)
AMS 缓存所有 ContentProvider 的 IContentProvider
AMS 缓存 ContentProvider 主要分为三步:
- 开机时缓存所有系统进程中的 ContentProvider;
- 解锁后缓存所有正在运行进程的 ContentProvider;
- 进程启动后主动向 AMS 发布其 ContentProvider;比如,ContentResolver 中当前查找的 ContentProvider 进程没有启动,AMS 会先启动该进程,并等待该进程发布其 ContentProvider;
![](https://img.haomeiwen.com/i19729408/e724507dd698953e.png)
ContentResolver 通过 URI 中的 authority 查找 AMS 对应的 ContentProvider
![](https://img.haomeiwen.com/i19729408/c935e2c8436b706b.png)
总结
![](https://img.haomeiwen.com/i19729408/2dc2d95a42c33ee0.png)
原创文章,欢迎转载,但请注明出处。
网友评论