Android性能優化之Activity啓動優化

打開一個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的話會在每次消息隊列爲空時都回調執行。
    }
});

        當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,哇,滿面春風,得意洋洋,打完收工,下期再會~

 

 

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