看前人在好久之前就達到我如今遠遠不及的高度,這讓我以爲有些無力。也正是他們趟過的坑能指引我即將前進的路。因此我很慶幸。我慶幸有人指引,我慶幸我在前進。java
本着向大牛學習以及知其然知其因此然的精神,準備有目的、系統性的Read The Fucking Source Code。既看成本身的筆記,也但願能夠幫助部分後來者。android
這是一篇已經閱讀的Anroid6.0中Framework源碼目錄,前期會有順序、有目的的閱讀源碼,下一篇多多少少都會和上一篇有些關聯,建議先馬後看。後續應該會組成一個系列。儘管會有些艱難,仍是但願本身能堅持下去。Framework,我來了。緩存
本文依據6.0源碼,主要分析Zygote進程的啓動流程。Zygote進程是Android和Java世界的開創者。在android系統中,全部的應用進程和SystemServer進程都是由Zygote進程fork而來。其重要性因而可知一斑。網絡
Zygote進程由init進程啓動,SystemServer進程和應用進程由Zygote進程啓動。本文依據6.0源碼,主要分析SystemServer進程的啓動流程。SystemServer進程的做用是啓動各類核心服務,例如Installer、ActivityManagerService、WindowManagerService、PowerManagerService等等。異步
- 點擊桌面Launcher圖標後作了哪些工做?
- 應用程序何時被建立的?
- Application和MainActivity的onCreate()方法何時被調用的?
本文依據Android6.0源碼,從點擊Launcher圖標,直至解析到MainActivity#OnCreate()被調用。工具
在Activity中通常第一句就是調用setContentView(R.layout.XXX),但這其中系統作了那些工做?咱們知道,在ClassLoader裝載了MainActivity以後,首先建立了Application,以後依次調用Application對象的onAttach和onCreate()方法。而後順序調用第一個Activity的onAttach和onCreate()方法。oop
在Activity#setContentView()中會調用PhoneWindow#setContentView()。而在PhoneWindow#setContentView()中有這麼一句mLayoutInflater.inflate(layoutResID, mContentParent)。這行代碼的做用是將咱們的activity_main.xml填充到mContentParent中去。詳見:setContentView源碼解析。在寫adapter的時候,也常常寫mInflater.inflate(layoutResID, null)。那麼,這行代碼怎麼就將xml文件轉換成了View或者ViewGroup了呢?佈局
Toast中你所不知道的那些細節學習
Activity各個方法是何時被調用的?史上最簡單也是最詳細的Activity啓動流程源碼解析spa
極度的簡單每每是繁瑣的假象。
你真的會用AsyncTask嗎?
自定義View必看的頂級視圖DecorView
一、特別適合數據量小,通訊頻繁的網絡操做。
二、擴展性強。Volley 中大可能是基於接口的設計,可配置性強。
三、必定程度符合 Http 規範,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的處 理,請求頭的處理,緩存機制的支持等。並支持重試及優先級定義。
四、默認 Android2.3 及以上基於 HttpURLConnection,2.3 如下基於 HttpClient 實現。
五、提供簡便的圖片加載工具。總之Volley就是很牛逼啦!
ThreadLocal不是一個具體的線程。它是一個線程內部的數據存儲類,經過它能夠再指定的線程中存儲數據,數據存儲之後,只有在指定線程中能夠獲取到存儲的數據,對於其它線程來講則沒法獲取到數據。
Android異步消息機制分析。消息是怎麼傳遞的?異步又是如何實現的?在看此文章以前建議不太瞭解ThreadLocal的讀者先了解下上一篇文章《ThreadLocal源碼淺析》,在後文中會有所涉及。