天天看點

Android開發藝術探索讀書筆記(三) Android開發藝術探索讀書筆記(三)

看了這章内容也有不少時間,也自己寫了些東西。但是總感覺講得不是清楚明白,無意中發現這篇 

Android開發藝術探索讀書筆記(三)

部落格,感覺寫的非常好。就借鑒了許多東西過來。“之是以自己這麼看重,是因為這篇應該是讀書筆記裡最重要的一篇了,這篇能吃透的話,基本

安卓

app層玩的機制都能了解的很清楚了。是以我也傾注了全部的心血來寫這篇,希望跟大家一起分享。” 

簡單先說下:這裡将第十章(

Android

的消息機制)、第九章(四大元件的工作過程)放在第八章(了解Window和WindowManager)前面的原因是:學習了解Window的知識最好需要先了解Activity的運作機制以及handler的工作原理,是以大家讀主席這本書的時候也建議按照這個順序來讀這三章,對window的了解會更水到渠成,以上。如果看這篇前你還沒有去看第二章的IPC機制,我強烈建議你看懂IPC再回來看這篇,會發現一切都變得非常清晰。熱切期盼各位看完能有收獲,有任何錯誤或者疑問都可在評論中給出,我會一一回複,感謝~

  1. 四大元件概述: 

    1) Activity的主要作用是展示一個界面并和使用者互動,它扮演的是一種前台界面的角色。 

    2) Service是一種計算型元件,用于在背景執行一系列計算任務,但因為其本身還是運作在主線程中的,是以耗時的背景計算仍然需要在單獨的線程中去完成。 

    3) BroadcastReceiver是一種消息型元件,用于在不同的元件乃至不同的應用之間傳遞消息。廣播注冊有兩種方式,動态注冊通過Context.registerReceiver()來實作,必須要應用啟動才能注冊;靜态注冊則在AndroidManifest檔案中進行,應用安裝時會被系統解析,不需要啟動應用就可接收廣播。 

    4) ContentProvider是一種共享型元件,用于向其他元件乃至其他應用共享資料。

  2. 下面我用UML圖的形式來說明四大元件的工作過程:
  3. Activity的工作過程        可以和下面這幅圖對比一下看看。
    Android開發藝術探索讀書筆記(三) Android開發藝術探索讀書筆記(三)
  4. Service 

    啟動: 

    Android開發藝術探索讀書筆記(三) Android開發藝術探索讀書筆記(三)
    綁定: 
    Android開發藝術探索讀書筆記(三) Android開發藝術探索讀書筆記(三)
  5. BroadcastReceiver 

    注冊(動态): 

    發送和接收: 

  6. ContentProvider 

    1) 當ContentProvider所在的程序啟動的時候,它會同時被啟動并被釋出到AMS中,這個時候它的onCreate要先去Application的onCreate執行。 

    2) 啟動方式請看page363,這裡就不畫了,書上畫的非常清晰易懂,就寫幾個tips 吧。 

    a. 應用啟動的入口為ActivityThread的main方法,main方法會建立ActivityThread執行個體并建立主線程消息隊列。 

    b. attach方法中遠端調用AMS的attachApplication方法,并提供ApplicationThread用于和AMS的通信。 

    c. attachApplication方法會通過bindApplication方法和H來調回ActivityThread的handleBindApplication,這個方法會先建立Application,再加載ContentProvider,然後才會回調Application的onCreate方法。 

    d. ContentProvider的multiprocess屬性決定了ContentProvider是否是單例(false時),一般都用單例。 

    e. ContentResolver的具體類是ApplicationContentResolver,當ContentProvider所在程序未啟動時,第一次通路它會觸發ContentProvider的建立以及程序啟動。 

    3) query流程 

繼續閱讀