Framework学习(十)Content Provider启动过程,Android性能优化推荐书

本文详细解析了Android Content Provider的启动过程,从ActivityThread的acquireProvider方法开始,经由AMS的getContentProvider,再到进程启动与Provider安装。内容涵盖了缓存机制、反射创建Provider及attachInfo方法的调用。对于理解Android系统如何管理和使用Content Provider具有指导意义。
摘要由CSDN通过智能技术生成

@Override

protected IContentProvider acquireUnstableProvider(Context c, String auth) {

return mMainThread.acquireProvider(c,

ContentProvider.getAuthorityWithoutUserId(auth),

resolveUserIdFromAuthority(auth), false);

}

返回了ActivityThread类型的mMainThread对象的acquireProvider方法。

frameworks/base/core/java/android/app/ActivityThread.java

ActivityThread#acquireProvider()

public final IContentProvider acquireProvider(

Context c, String auth, int userId, boolean stable) {

final IContentProvider provider = acquireExistingProvider(c, auth, userId, stable); //1

if (provider != null) {

return provider;

}

IActivityManager.ContentProviderHolder holder = null;

try {

holder = ActivityManagerNative.getDefault().getContentProvider(

getApplicationThread(), auth, userId, stable); //2

} catch (RemoteException ex) {

throw ex.rethrowFromSystemServer();

}

if (holder == null) {

Slog.e(TAG, "Failed to find provider info for " + auth);

return null;

}

holder = installProvider(c, holder, holder.info,

true /noisy/, holder.noReleaseNeeded, stable); //3

return holder.provider;

}

注释1处检查ActivityThread中的ArrayMap类型的mProviderMap中是否有目标ContentProvider存在,有则返回,没有就会在注释2处调用AMP的getContentProvider方法,最终会调用AMS的getContentProvider方法。

注释3处的installProvider方法用来将注释2处返回的ContentProvider相关的数据存储在mProviderMap中,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值