Android Framework源碼當中哪些類有必要進行深入學習?

平時寫android程序過程中發現很多東西用得心裡沒底, 想著閱讀一些android的源代碼, 請問哪些比較重要或者很值得學習的源碼中的類可以學習?


《Android開發藝術探索》這本書很經典,一樓二樓說的知識點書里基本都涵蓋了,而且結構清晰,通俗易懂


說說比較熟悉的幾個部分吧,之後想到再補充

1. 從WindowManagerService出發

從WMS出發,可以看到每一個View添加進來的過程,以及系統如何添加一個新的WindowState被WMS進行管理,如何通知SurfaceFlinger去進行View的繪製,每一個Window在WMS中間都是以WindowState為基礎進行管理的,WindowState的Client如何通過Binder機制與ViewRoot進行通信,WindowState如何計算每個Window的大小(從PhoneWindowManager調用過來),以及一些SystemUI裡面的組件的信息如何通過WMS進行轉發,每個Window出現的動畫如何調用,Window更新Focus時候的如何進行,每個Window層級如何計算

2. 從ActivityManagerService出發

AMS和ActivityStackSupervisor對於ActivityStack的管理(moveTaskToBack,moveTaskToFront),ActivityStack與WindowState之間的聯繫,一個


inputsystem

windowmanagerservice

packagemanagerservice

app的viewsystem

activitymanagerservice

surfaceflinger

開機啟動流程

binder

嗯嗯,差不多這些你搞懂了系統方面就沒問題了

可惜app開發跟framework還是有比較大差別的,至少你了解這些就不會出現你的app報錯在framework層你看不懂log的情況

而且還能直接跳過app的開發框架,直接使用service來做一些比較有趣的事


ViewRootImpl這個類非常重要,直接關係著View的繪製流程調用;另外ViewGroup和View 裡面事件處理和分發都值得關注。


四大組件相關:

Activity, Service/IntentService, BroadcastReceiver, ContentProvider, Intent

UI相關:

View, ViewGroup, ViewRoot, ViewRootImpl, Scroller, 五大布局類, SurfaceView, Animator, Animation, Window, WindowManager

適配器相關:

BaseAdapter

線程相關:

AsyncTask, HandlerThread

消息相關:

Message, Messenger, MessageQueue, Looper, Handler, Parcelable

進程相關:

Binder

其他:

Application, Context, 各種ManagerService,如ActivityManagerService, WindowManagerService, PackageManagerService等。

閱讀源碼這種事情,正確的方法是平時遇到困惑時去查看,養成看源碼的習慣。如果毫無目的去閱讀,會發現很快就忘掉了,理解也不深刻。


context

servicemanager


設計模式吧


記得我覺得幾個方面吧:

1、Android 的開機流程:init-》zygote-》system_service,這個很重要,學習這個過程,你可以學習到 Android 是一個分層的系統,對 Android 的整體架構會有一個很好的了解!

2、Framwork 中的主流服務:ActivityManagerService、PackageManagerService、WindowManagerService、AlarmManagerService、JobSchedulerService、ResourceManagerService、InputManagerService 等等的一些服務,可以結合 Android 的開機流程的每個階段來看!!

3、IPC 通信機制:Binder,這個很重要,不僅是系統的服務,還是應用自己的服務,都是基於 Binder 機制的

4、進程的創建,startActivity,startService、bindService 等等關於四大組件的啟動的問題!!

5、Activity 的啟動和切換,不同的模式哦的區別!!!

暫時想到了這些,就這樣吧,以後想到了再補充,我也在路上,共勉!!


第一幅圖表明了APP進程和MediaServer進程的關係

第二幅圖表明了APP進程和MediaServer進程內與MediaPlayerService相關的詳細類圖

第三,四幅圖表明了NuPlayer(一種mediaplayer,存在在MediaServer進程中)詳細類圖和時序圖

以上都是native側與MediaPlayerService相關的描述具體的MediaPlayerService與ServiceManager之間的關係,以及第二幅圖中其他模塊的詳細時序,將會持續更新


謝邀,我也是入門不久,只是看了一點點。 我支持@yuxingxin 的回答


那就從你最常用的看起,這樣心裡就有底了


ListView控制項相關的內容可以看一下,包含回收復用機制,滑動機制。

搞明白這個,其他控制項就基本也不會有太大問題了


推薦閱讀:

國外有哪些優秀的源碼剖析類書籍?
關於閱讀開源項目的源碼,有哪些經驗值得分享?

TAG:Android應用 | Android開發 | 源代碼 | 源碼閱讀 | Android |