多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
根据第6章对Context的介绍,Context的getContentResolver最终会调用它所代理的ContextImpl对象的getContentResolver函数,此处直接看ContextImpl的代码。 **ContextImpl.java::getContentResolver** ~~~ public ContentResolver getContentResolver() { returnmContentResolver; } ~~~ 该函数直接返回mContentResolver,此变量在ContextImpl初始化时创建,相关代码如下: **ContextImpl.java::init** ~~~ final void init(LoadedApk packageInfo, IBinder activityToken, ActivityThreadmainThread, Resources container,String basePackageName) { ...... mMainThread = mainThread;//mainThread指向AcitivityThread对象 //mContentResolver的真实类型是ApplicationContentResolver mContentResolver = new ApplicationContentResolver(this, mainThread); ...... } ~~~ 由以上代码可知,mContentResolver的真实类型是ApplicationContentResolver,它是ContextImpl定义的内部类并继承了ContentResolver。 getContentResolver函数比较简单,就分析到此。下面来看第二个关键点。 >[info] **提示**:为了书写方便,将ContentProvider简称为CP,将ContentResolver简称为CR。