打開一個app的時候速度比較慢,等一會才能看到UI,有很多種原因,下面是我根據這些個情況做出的多種優化,記錄 一下,
1、采用動態布局:先是優化了布局,減少層級嵌套,使用merge優化等等,但發現加載xml布局還是慢了點,于是改為動態布局,布局的 時間減少了好幾倍,
2、利用MessageQueue.IdleHandler()回呼 按照activity的生命周期,onStart時可以看見頁面,onResume可以獲得焦點,所以就自然而然地以為在onResume時 已經布局完成,加載資料也沒關系,可是我錯了,因為onResume先于measure等流程,此時加載資料會導致加載布局 頁面延后,給人一種打開app速度緩慢的感覺,所以如果我們想在界面繪制出來后做點什么,那么在onResume里面顯 然是不合適的,(參考https://blog.csdn.net/tencent_bugly/article/details/78395717) 于是采用下面方式:
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
// 先讀本地快取來顯示資料
// 延遲拉取網路最新資料,重繪快取和UI
return false; // false的話只執行一次,true的話會在每次訊息佇列為空時都回呼執行,
}
});
最新資料,重繪快取和UI return false; // false的話只執行一次,true的話會在每次訊息佇列為空時都回呼執行,} });
當MessageQueue訊息佇列里面的message為空時(大概就是onResume和measure, layout, draw都執行完以后), 才執行IdleHandler回呼,此時不會阻塞主執行緒加載布局,又減少了大約1倍的啟動時間,
3、先加載本地快取,后從網路拉取 在app經常做的就是這種“假資料”吧,為了提高用戶體驗,先加載上次退出前保存的資料,再拉取新的資料覆寫,
4、從閃屏頁到設定Theme背景,再到設定Window背景,直到放棄 首先,可以弄一個閃屏頁,就能在打開app時很快看到UI,當然這不是我的需求,其次呢,可以通過設定Theme的背 景,很快看到UI,在activity上應用如下這種style,
<style name="XDAppTheme" parent="AppTheme">
<item name="android:windowBackground">圖片</item>
<item name="android:windowIsTranslucent">false</item>
</style>
可是,這種方式有個缺點,不能動態改變圖片,不符合我的需求,最后,這種設定背景的方式并不能滿足我的需求,勉 強加載個背景圖片充充數吧(可能減少個幾毫秒時間o(╥﹏╥)o),在super.onCreate(savedInstanceState);前設定背 景:getWindow().setBackgroundDrawableResource(圖片資源);
5、加載資料不要放在主執行緒 偶然發現,有時候加載比較慢,有時候加載比較快,為神馬?于是找找找,原來某處妖孽縱橫,此起彼伏,占用了我的 主執行緒,果斷放在io執行緒,提升了大約300ms

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/277057.html
標籤:其他
