1.13 ContentProvider机制
less than 1 minute read
ContentProvider使用
// 1. 继承ContentProvider
public class XXXContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values);
public int delete(Uri uri, String selection, String[] selectionArgs);
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
...
}
// 2. 在AndroidManifest.xml注册
<manifest>
...
<application ...>
<provider android:name=".XXXContentProvider" android:authorities="com.xxx.providers.xxxprovider" />
</application>
...
</manifest>
// 3. 使用ContentProvider
ContentProvider provider = getContentResolver();
Uri uri = Uri.parse("content://com.xxx.providers..xxxprovider/person");
ContentValues values = new ContentValues();
values.put("name", "xxx");
provider.insert(uri, values);
ContentProvider机制
- client进程: 向system_server请求对应的provider
- system进程: 如果目标provider未启动, system_Server调用
startProcessLocked
启动provider进程
- provider: 进程启动后attach到system_server, 紧接着bindApplication, 在这个过程会installProvider以及publishContentProviders, 再binder call到system_server进程
- system进程: 发布provider信息, 通过notify机制, 唤醒前面处于wait状态的binder线程, 并将
getContentProvider()
返回给client进程
- client进程: 执行installProvider操作, 安装providers的对象记录, 引用技术维护等工作