【Android優化篇】提升Activity加載速度的方法


文章轉自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan

前言

這個也是我面試遇到的問題,當時只回答了一種情況,異步加載數據,沒想到別的方式,回來以后專門研究了一下。

正文

Activity加載速度是很影響用戶體驗的,也是衡量一款APP質量的重要指標之一,所以優化Activity加載速度至關重要。

既然要優化首先需要了解Activity的生命周期,這里我昨天整理的有一篇文章Android四大組件之Activity—生命周期篇大家可以看看,從生命周期很明顯可以看到,Activity一個完整的生命周期中onCreate(Bundle)onResume()onPause()使用比較頻繁,另外onStart()因為負責的事情比較少,這里就不列入考慮。Activity之間跳轉、回退都會頻繁調用onResume()onPause(),因此這兩個方法中不宜做過多耗時操作,而onCreate(Bundle)中更是Activity啟動后進行初始化布局的工作。

綜上,不難總結出以下幾個優化方向:

1、耗時操作要進行異步處理,盡量在onCreate(Bundle)方法中減少耗時操作,在onResume()也不可進行過多操作。

2、布局文件不可過於臃腫,必須布局優化

3、視圖加載優化

4、另外,有時候我們會用到自定義控件,所以一定要進行繪制優化

耗時操作優化

Android是不允許在UI線程也就是主線程進行耗時操作的(例如網絡請求、IO操作等等),因此要采用異步加載的方式來進行,官方推薦使用的有HandlerAsyncTaskThread等,市場上也有很多第三方框架可供我們使用,比如RxJava,都是很不錯的解決方案,這里具體用法不再多說。

布局優化

布局優化很簡單,結合《開發藝術探索》和文末的參考文獻的文章大致有如下思路:
1、刪除多余的無用控件和層級
2、include標簽
3、merge標簽
4、ViewStub

第一點很明顯,用不到的控件和層級只會浪費渲染時間,刪除為好。

第二點和第三點,include和merge兩個最好配合使用,include減少視圖重用,merge幫助include減少視圖層級,比如include所引用布局中根布局和include引用到的布局根布局重復,使用merge可以有效解決這個問題。

最后ViewStub可以幫助我們延遲加載暫時無用的視圖,比如主頁加載數據為零,要展示空數據頁面,空頁面不是一開始就必須加載的,可以借用ViewStub在需要加載的時候進行渲染並顯示。

延遲加載優化

延遲加載除了視圖優化中用到的ViewStub外,還有一些其他情況,比如側滑菜單,剛開始是不可見的,用戶點擊或者滑動之后才會出現,這就是不必馬上加載的,可以在獲取到側滑菜單處於可見狀態的時候進行加載。另外Fragment懶加載情況也是很好的優化辦法。

自定義控件優化

隨着用戶對APP的要求越來高,自定義控件幾乎是每個APP的必備,因此自定義View帶來的問題也隨之增多,比如由此導致的OOM,內存泄露等等。這里只討論自定義控件的繪制優化,主要是針對onDraw()里的優化:
1、不要在onDraw()進行大量的操作,不要創建過多的局部對象,這會導致大量的內存開銷,從而導致系統頻繁的GC,拉低程序執行效率

2、不要在onDraw()進行耗時操作!好吧,很明顯耗時操作在Android開發中是時刻都需要注意的問題。

3、減少循環操作,成千上萬次的循環會很占用CPU的時間,導致繪制不流暢。

慎用多線程

這是文末參考文獻提到的,盡量不要在一個app內使用多進程!這塊我不熟就不多說了,先挖個坑在這里。

總結

其實提升Activity加載速度的方法就那么多,但是這是一個需要不斷進行的操作,隨着我們的項目開發總是會有新的需要優化的地方,良好的用戶體驗關系到用戶的忠誠度。

以上方法有我以前開發項目中實際用到的,結合網上查閱資料,翻閱書籍總結的,如果有不對的地方大家直接評論打臉就好。

參考文獻

1、提升進入界面的速度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM