前言
本文代碼基于 Android S 。
概述
ContentResolver 查找對應(yīng) URI 的 ContentProvider 步驟簡單概要為:
- ContentProvider 的提供方在其 AndroidManifest 中注冊 authority;
- AMS 緩存各個(gè) userId 對應(yīng)的 [authority, IContentProvider];
- ContentResolver 從 URI 中取出其 authority 并在 AMS 中獲取對應(yīng)的 IContentProvider。
ContentProvider 提供方注冊 authority

注冊 Authority
AMS 緩存所有 ContentProvider 的 IContentProvider
AMS 緩存 ContentProvider 主要分為三步:
- 開機(jī)時(shí)緩存所有系統(tǒng)進(jìn)程中的 ContentProvider;
- 解鎖后緩存所有正在運(yùn)行進(jìn)程的 ContentProvider;
- 進(jìn)程啟動后主動向 AMS 發(fā)布其 ContentProvider;比如,ContentResolver 中當(dāng)前查找的 ContentProvider 進(jìn)程沒有啟動,AMS 會先啟動該進(jìn)程,并等待該進(jìn)程發(fā)布其 ContentProvider;

AMS 緩存 ContentProvider
ContentResolver 通過 URI 中的 authority 查找 AMS 對應(yīng)的 ContentProvider

ContentResolver 查找 ContentProvider
總結(jié)

ContentResolver 尋找正確的 ContentProvider
原創(chuàng)文章,歡迎轉(zhuǎn)載,但請注明出處。