android載入速度優化,通過專案的優化過程分析

2021-07-07 08:22:26 字數 2710 閱讀 4294

通過這麼長時間的盒子開發以及之前手機專案的經驗,總體感覺兩種不同裝置還是有很多不同的地方的,首先一點不同的就是,手機專案和電視專案預設啟動頁面載入速度有重要區別

對於手機:手機載入網路資料,由於螢幕小,如果主頁有網路的情況下,基本都是顯示預設,這也是由於網速的限制,更重要的是手機上基本是**混排,使用者沒看到可能焦點就在文字上了。

對於電視:如果應用首頁載入使用預設圖,會感覺特別醜,因為螢幕大,重要資訊都是,如果沒有,那使用者看到的都是空白,使用者的焦點沒有了,只有等待和抱怨。

因此,電視首頁載入至為重要。

2.0針對以上情況,是增加了一張純黑的view蓋住下邊的view,等待首頁輪播圖大圖資料載入完成讓其消失,但是黑屏時間過長。以下就是針對黑屏時間已經做的和建議的優化

通過之前手機專案列表優化、viewpager優化以及其他專案優化的經驗,對2.0做了一些優化,主要有以下幾點:

2、如果本地有網路快取,首先將從硬碟快取加入到記憶體快取,原因對於電視來說,毫秒必爭啊,相對來說從file到bitmap/drawable等物件的decode過程相當慢,小幾百ms,大圖要1s到ns,所以,這一步至關重要啊。

總耗時從13840ms減少到3459ms

3、通過第二步的優化,本以為減少這麼長時間,總過減少了至少10秒,速度會快很多,但表現並沒有多好,繼續分析

發現最原始的是在homeactivity的oncreate中呼叫了matrixpager.loaddata(false);這行函式,這個函式裡邊呼叫了strategy.loadpagedata(isrefleshdata);方法

4、以上一步搞好後,對homeactivity的oncreate進行了分析,log發現,oncreate從開始到執行到loaddata,期間耗時5s多,看下圖oncreate before loaddata,這句是在loaddata執行之前的log,從oncreate開始到執行loaddata,阻塞了5秒,這個時間還是很長的。

通過跟蹤**,發現其實是在setcontentview中載入布局檔案耗時,逐步跟進,首先發現了guidepageview這個類,2.0專案中首次安裝會有引導頁,引導頁其實只是viewpager放在了homeactivity(launcher activity),這幾張引導頁的也是從本地decode的,decode過程非常緩慢,這裡就沒有使用上一種方式,而是將decode過程放在子執行緒中,decode完成後,再給viewpager設定。

如上圖:優化前log:loadimage guidepageview::init耗時2751,優化後如下圖耗時從 2751ms到28ms

oncreate before loaddata耗時也減少了很多。

這裡邊其實隱藏了乙個重要知識點,就是不要再view的兩個簽名的構造方法中做太多事情,因為布局檔案在inflate過程中會呼叫這個構造方法,邏輯阻塞時間越長,inflate時間越長

5、在initview中,有一步傳送統計資料的操作,這一步操作呼叫了我封裝的device類的方法,比如getsn,getmac等方法

這些都是讀的本地檔案,也是耗時,這段拿到了子執行緒,log就不附了,總共節省1s左右時間

6、在initview中,還有一步操作很耗時,但是我也無能為力了,因為對2.0**了解的不多,參與的也少,所以只能給建議了,裡邊涉及的東西還是要說一下。

initview中有以下操作

if (versioncode == 1) else if (versioncode == 2)

這是判斷首頁是五個頁面還是四個頁面的策略選擇方式

在建構函式中有如下**:

重要的還不是這裡,是addtabpageview中的五個new操作,看其中乙個吧

}protected void init()

粗略看了下這個inflate的layout,沒有自定義view,但耗時每個二三百、三四百毫秒,五個加起來,能達到兩三秒,inflate過程很長,如果這幾個view能在載入homeactivity之前例項化完成或者例項化幾個,類似加入memory過程中,可能時間會縮短

總結下:

1、除了針對view的操作,能拿到子執行緒就拿到子執行緒去做操作;

2、載入順序很重要,結合佇列讓執行緒池裡的執行緒執行有序,保證最先在使用者面前的介面的資料最先載入,以最快顯示出來;

4、不要在自定義view的構造方法中做太多耗時操作,這樣更會延長inflate過程;

5、inflate過程很漫長,如果自定義view中inflate了其他布局,有必要放在子執行緒執行inflate操作(首先確保inflate的布局中沒有其他view在構造方法中做了對view的操作,否則會報錯)。

純手打,如有不同見解或錯誤理解,歡迎指正

優化頁面載入速度

1.js css html做gzip壓縮 不要對進行gzip壓縮 2.刪除js css html 檔案的注釋,回車符,以及無效位元組 4.css放到header中,避免白屏 5.合併js和css 壓縮js和css 6.優化快取 對沒有變化的css js,等網頁元素,直接利用客戶端的瀏覽器快取讀取來有...

Android啟動速度優化

fyi 可以學習如何優化android啟動速度。個人認為可以從以下幾個方面。1 u boot 優化u boot體積,減少不需要的驅動和命令。2 kernel 1 模組載入方式 如usb等費時間的子系統 2 移除kernel calibrate delay和crc check 以上兩個使用最新的編譯器...

android 啟動速度優化

冷啟動 cold start 溫啟動 warm start 熱啟動 hot start 時間獲取 我們可以使用adb命令啟動應用,來獲取當前應用的啟動時間 adb shell am start w packagename mainactivity 複製 總共返回了三個結果,我們以 waittime ...