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之間的聯繫,一個inputsystemwindowmanagerservicepackagemanagerserviceapp的viewsystemactivitymanagerservicesurfaceflinger開機啟動流程binder
嗯嗯,差不多這些你搞懂了系統方面就沒問題了
可惜app開發跟framework還是有比較大差別的,至少你了解這些就不會出現你的app報錯在framework層你看不懂log的情況而且還能直接跳過app的開發框架,直接使用service來做一些比較有趣的事ViewRootImpl這個類非常重要,直接關係著View的繪製流程調用;另外ViewGroup和View 裡面事件處理和分發都值得關注。
四大組件相關:
Activity, Service/IntentService, BroadcastReceiver, ContentProvider, IntentUI相關: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控制項相關的內容可以看一下,包含回收復用機制,滑動機制。搞明白這個,其他控制項就基本也不會有太大問題了
推薦閱讀: