天天看點

Android面試資料集合,完整PDF

剛從阿裡面試回來,想和大家分享一些我的面試經驗,以及面試題目。

這篇文章将會更加聚焦在面試前需要看哪些資料,一些面試技巧以及一些這次的面試考題。

要準确的測量APP的啟動時間,首先我們要了解APP整個啟動過程。 啟動過程,一般可以分為以下三類:

Android面試資料集合,完整PDF

愛奇藝Android用戶端啟動優化與分析

從上圖可以看出,啟動過程中,Cold的模式下,生命周期中做的事情最多,啟動的時間最長,是以,我們以冷啟動來衡量APP啟動時間。啟動過程中,如何判斷哪些生命周期影響啟動速度呢?

我們知道,APP的啟動和運作,就是Linux系統建立程序群組件對象,并在UI線程中處理元件消息的過程。

啟動過程圖:

Android面試資料集合,完整PDF

App的啟動過程,可以劃分為三個階段:

當APP啟動時,如果目前app的程序不存在,便會建立新的程序;App主程序啟動後,如果啟動某個元件,并且該元件設定了android:process屬性,元件所運作的程序不存在,也會建立新的程序。

需要注意的是,如果在啟動階段,初始化的元件中,包含了多個程序,便會建立多次程序,BindApplication操作也會重複執行多次

3.2 建立UI線程及Handler

程序建立後,會通過反射,執行ActivityThread入口函數,建立Handler,并在目前線程中prepareMainLooper,并在Handler中接收元件的消息,我們來看一下Handler中處理的消息:

LAUNCH_ACTIVITY,啟動,執行Activity

RESUME_ACTIVITY,恢複Activity

BIND_APPLICATION,啟動app

BIND_SERVICE,Service建立, onBind

LOW_MEMORY,記憶體不足,回收背景程式

sMainThreadHandler中,處理的消息很多,這裡隻羅列了,可能在啟動階段可能會執行的操作, 這些操作都是運作在Main Thread中,對啟動而言,屬于阻塞性的。

Activity生命周期,自然需要在啟動階段執行,但,對于Service的建立,Trim_memory回調,廣播接收等操作,就需要重點考慮,其操作耗時性。

前兩個過程,建立程序和UI線程及Handler,都是由系統決定的,對APP開發者而言,并不能控制其執行時間,在本階段,執行BindApplication,和Acitivity生命周期,都是可以由開發者自定義。

Activity執行到onResume之後,會執行至ViewRootImpl,執行兩次performTraversals,第二次traversal操作中,會執行performDraw操作,同時通知RenderThread線程執行繪制.

從啟動的三個階段,我們可以看出,啟動啟動時間的長短,決定因素在于,主線程中所做事情消耗的時間的多少,是以,我們的優化工作主要集中在,排查主線程中耗時性的工作,并進行合理的優化。Android手機,系統的資源是有限的,過多的異步線程,會搶占CPU,導緻主線程執行時間片間隔增大。同樣的,記憶體消耗狀态,GC頻率,也會影響啟動的時間

不管怎麼樣,不論是什麼樣的大小面試,要想不被面試官虐的不要不要的,隻有刷爆面試題題做好全面的準備,當然除了這個還需要在平時把自己的基礎打紮實,這樣不論面試官怎麼樣一個知識點裡往死裡鑿,你也能應付如流啊~

Android面試資料集合,完整PDF