Android性能優化(一)App啓動時間優化

App啓動時間優化

一、首先我們需要清楚App的主題加載

你的App的主題位於

res/values/styles

<style name = "AppTheme" parent = "Theme.AppCompat.Light">

我們點擊Light主題進去,會發現此主題位於

app/build/intermediates/exploded-oar/com.android.support/appcompat-v7/25.1.0/res/values/values.xml

<style name = "Theme.AppCompat.Light" parent = "Base.Theme.AppCompat.light">

點擊此Light又會跳到

<style name = "Base.Theme.AppCompat.Light" parent = "Base.v7.Theme.AppCompat.light">

我們點擊後面這個Light進去又會跳到

<style name = "Base.v7.Theme.AppCompat.Light" parent = "Platform.Theme.AppCompat.light">

在這裏他定義了一個

<item name ="windowNoTitle"> false </item>

這裏有一個非常重要的選項

在他的父類

<style name = "Platform.AppCompat.Light" parent = "android.Theme.light">

中有一個

<item name ="android.windowBackground">@color/background_material_light</item>

而這個color就是白色

在v7包中的color中定義此色

<color name = "background_material_light">@color/material_grey_50 </color>

所以我們可根據windowBackground去優化App啓動的視覺感官

二、如何解決呢

1> 我們可以在原來的AppTheme主題下去加一行

<item name = "android : windowIsTransluncent>true</item>

這樣我們在啓動App時回去加載一個透明的背景,當然在用戶層面看到的就是Launcher 桌面,過一會應用纔會加載出來,強行甩鍋給手機系統。
我們在應用啓動後需要還原主題,我們需要在系統主Activity中去加載最開始的主題。
可以在主ActivityonCreat方法中去

setTheme(R.style.AppTheme)

這樣在應用加載出來時又恢復了正常,只是手機System需要背鍋了

2> 如果想要徹底的優化根治app的啓動時間,我們需要更加深入的瞭解app的啓動以及一些測量app啓動的方法

三、如何測啓動一個App的時間

我們如和獲知一個APP的啓動時間呢

1> 我們在用logcat抓取手機app啓動的日誌中去搜索 “dispaly” 關鍵字可獲取該app的啓動時間
2>可以使用adb命令去啓動主Activity去獲取該app的啓動時間

adb shell am start -W 包名/+全類名

比如

adb shell am start -W com.lqr.wechat/com.lqr.wechat.activity.SplashActivity

在控制檯打印出日誌中的 ThisTime 就是啓動時間

四、Launcher啓動App的過程

Launcher上點擊某個app的圖標會直接調用到amstartActivity方法,該方法會將app分爲方法區堆區java棧三個部分
在這裏插入圖片描述
ActivityThreadattach方法會開啓app,Application再開啓activity,在調用attach後會調用attach Application遠端進程調用handleBindApplication去創建App,調用ApplicationonCreat方法也就是ActivityThread中的mInstrumenttation.callApplicationOnCreat(app)去啓動

五、找到最耗時的方法

通過檢查trace的方法在主線程中找到最耗時的方法看能否放在子線程中,放在子線程中的方法要複合以下幾個特徵:
1、沒有創建handler
2、沒有繪製UI
3、異步要求不是很高

除此以外如果是單例模式的話可以嘗試用懶漢模式創建,這樣在使用該對象的時候再去創建,節省資源

如果是對啓動頁要求不是很大的情況下可以加入

<item name = "android : windowDisablePreview">true</item>

意思爲設置禁止啓動項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章