【源碼閱讀】ContentResolver

因為要找一找 ContentResolver 的具體實現(xiàn)是在哪里的唠亚,因此拜讀了下 Android 的源碼盟庞,以下就是拜讀過程和思路

getContentResolver() 是定義在 Context 里的, 以下是 Context 的源碼

    /** Return a ContentResolver instance for your application's package. */
    public abstract ContentResolver getContentResolver();

從關(guān)鍵字 abstract 可以看出 getContentResolver() 是一個抽象方法, 也就是說在子類當(dāng)中吃媒,必然有具體的代碼實現(xiàn)

于是沿著 Activity 的繼承鏈找

Context 子類 ContextWrapper源碼找到了下面的實現(xiàn)語句:

    @Override
    public ContentResolver getContentResolver() {
        return mBase.getContentResolver();
    }

原來 ContextWrappergetContentResolver 外包出去給 mBase, 這里編程當(dāng)中的設(shè)計模式 委托模式颇蜡,將 getContentResolver 交給 mBase 來實現(xiàn)

這時就需從 ContextWrapper(本類中) 找出 mBase 是什么鬼

于是又找到了下面的賦值方法:

    /**
     * Set the base context for this ContextWrapper.  All calls will then be
     * delegated to the base context.  Throws
     * IllegalStateException if a base context has already been set.
     * 
     * @param base The new base context for this wrapper.
     */
    protected void attachBaseContext(Context base) {
        if (mBase != null) {
            throw new IllegalStateException("Base context already set");
        }
        mBase = base;
    }

于是就指道了 attachBaseContext 是設(shè)置 mBase 的,這時還未弄得懂 mBase 是什么鬼,需要找出誰調(diào)用了 attachBaseContext 這個方法哼绑,并且傳遞了什么樣的參數(shù),才能弄懂

然后在 Activity源碼 中找到 attachBaseContext 的調(diào)用了碉咆,原來是 attach 語句進行了調(diào)用

    final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
            Application application, Intent intent, ActivityInfo info,
            CharSequence title, Activity parent, String id,
            NonConfigurationInstances lastNonConfigurationInstances,
            Configuration config, String referrer, IVoiceInteractor voiceInteractor,
            Window window) {

        // 就是這句了
        attachBaseContext(context);

這時就接觸真相了

每次 App 啟動的時候抖韩,都會調(diào)用 Activity 的 attach 方法,而 attach 方法疫铜,傳入的 context 就是類 ContextImp 了茂浮,它的源碼里有 getContentResolver 的實現(xiàn)方法:

    @Override
    public ContentResolver getContentResolver() {
        return mContentResolver;
    }

ContextImp 里面也有下面的這一句代碼,對 mContentResolver 進行賦值壳咕,就是這句創(chuàng)造了 Resolver 的了席揽,到此我們就找出了 Resolver 了

mContentResolver = new ApplicationContentResolver(this, mainThread, user);

ContextImp 也有類 ApplicationContentResolver 的實現(xiàn),這里就不提下去了

接著就是 ActivityThread 類里面有如何將 Mainfest 創(chuàng)造 content provider 的映射表的實現(xiàn)代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谓厘,一起剝皮案震驚了整個濱河市幌羞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庞呕,老刑警劉巖新翎,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件程帕,死亡現(xiàn)場離奇詭異,居然都是意外死亡地啰,警方通過查閱死者的電腦和手機愁拭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亏吝,“玉大人岭埠,你說我怎么就攤上這事∥蹬福” “怎么了惜论?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長止喷。 經(jīng)常有香客問我馆类,道長,這世上最難降的妖魔是什么弹谁? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任乾巧,我火速辦了婚禮,結(jié)果婚禮上预愤,老公的妹妹穿的比我還像新娘沟于。我一直安慰自己,他們只是感情好植康,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布旷太。 她就那樣靜靜地躺著,像睡著了一般销睁。 火紅的嫁衣襯著肌膚如雪供璧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天冻记,我揣著相機與錄音嗜傅,去河邊找鬼。 笑死檩赢,一個胖子當(dāng)著我的面吹牛吕嘀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贞瞒,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼偶房,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了军浆?” 一聲冷哼從身側(cè)響起棕洋,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乒融,沒想到半個月后掰盘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摄悯,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年愧捕,在試婚紗的時候發(fā)現(xiàn)自己被綠了奢驯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡次绘,死狀恐怖瘪阁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邮偎,我是刑警寧澤管跺,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站禾进,受9級特大地震影響豁跑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泻云,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一贩绕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壶愤,春花似錦、人聲如沸馏鹤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湃累。三九已至勃救,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間治力,已是汗流浹背蒙秒。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵统,地道東北人晕讲。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像马澈,于是被迫代替她去往敵國和親瓢省。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容