Android性能优化典范 - 第6季
原文出處:http://hukai.me/android-performance-patterns-season-6/
序言
這是Android性能優化典范第6季的課程學習筆記,最近個人事情比較多,從被@起,這篇學習筆記就一直被惦記著,現在學習記錄分享一下,請多多包涵擔待指正!這次才一共6個段落,涉及的內容主要有:程序啟動時間相關的三個方面:activity的創建過程,臃腫的application啟動對象,主題啟動顯屏。另外還介紹了減少安裝包大小的checklist以及如何使用VectorDrawable來減少安裝包的大小。
系列閱讀
Android性能優化典范(一):主要從Android的渲染機制、內存與GC、電量優化三個方面展開,介紹了Android中性能問題的底層工作原理,以及如何通過工具來找出性能問題及提升性能的建議。
Android性能優化典范(二):20個短視頻,主要內容為:電量優化、網絡優化、Android Wear上如何做優化、使用對象池來提高效率、LRU Cache、Bitmap的縮放、緩存、重用、PNG壓縮、自定義View的性能、提升設置alpha之后View的渲染性能,以及Lint、StictMode等工具的使用技巧。
Android性能優化典范(三):更高效的ArrayMap容器,使用Android系統提供的特殊容器來避免自動裝箱,避免使用枚舉類型,注意onLowMemory與onTrimMemory的回調,避免內存泄漏,高效的位置更新操作,重復layout操作的性能影響,以及使用Batching,Prefetching優化網絡請求,壓縮傳輸數據等使用技巧。
Android性能優化典范(四):優化網絡請求的行為,優化安裝包的資源文件,優化數據傳輸的效率,性能優化的幾大基礎原理等。
Android性能優化典范(五):多線程并發的性能問題,介紹了AsyncTask,HandlerThread,IntentService與ThreadPool分別適合的使用場景以及各自的使用注意事項,這是一篇了解Android多線程編程不可多得的基礎文章,清楚的了解這些Android系統提供的多線程基礎組件之間的差異以及優缺點,才能夠在項目實戰中做出最恰當的選擇
App Launch time 101
提高程序的啟動速度意義重大,很顯然,啟動時間越短,用戶才越有耐心等待打開這個APP進行使用,反之啟動時間越長,用戶則越有可能來不及等到APP打開就已經切換到其他APP了。程序啟動過程中的那些復雜錯誤的操作很可能導致嚴重的性能問題。Android系統會根據用戶的操作行為調整程序的顯示策略,用來提高程序的顯示性能。例如,一旦用戶點擊桌面圖標,Android系統會立即顯示一個啟動窗口,這個窗口會一直保持顯示直到畫面中的元素成功加載并繪制完第一幀。這種行為常見于程序的冷啟動,或者程序的熱啟動場景(程序從后臺被喚起或者從其他APP界面切換回來)。那么關鍵的問題是,用戶很可能會因為從啟動窗口到顯示畫面的過程耗時過長而感到厭煩,從而導致用戶沒有來得及等程序啟動完畢就切換到其他APP了。更嚴重的是,如果啟動時間過長,可能導致程序出現ANR。我們應該避免出現這兩種糟糕的情況。
從技術角度來說,當用戶點擊桌面圖標開始,系統會立即為這個APP創建獨立的專屬進程,然后顯示啟動窗口,直到APP在自己的進程里面完成了程序的創建以及主線程完成了Activity的初始化顯示操作,再然后系統進程就會把啟動窗口替換成APP的顯示窗口。
上述流程里面的絕大多數步驟都是由系統控制的,一般來說不會出現什么問題,可是對于啟動速度,我們能夠控制并且需要特別關注的地方主要有三處:
- Activity的onCreate流程,特別是UI的布局與渲染操作,如果布局過于復雜很可能導致嚴重的啟動性能問題。
- Application的onCreate流程,對于大型的APP來說,通常會在這里做大量的通用組件的初始化操作。
- 目前有部分APP會提供自定義的啟動窗口,這里可以做成品牌宣傳界面或者是給用戶提供一種程序已經啟動的視覺效果。
在正式著手解決問題之前,我們需要掌握一套正確測量評估啟動性能的方法。所幸的是,Android系統有提供一些工具來幫助我們定位問題。
1、首先是display time:從Android KitKat版本開始,Logcat中會輸出從程序啟動到某個Activity顯示到畫面上所花費的時間。這個方法比較適合測量程序的啟動時間。
2、其次是reportFullyDrawn方法:我們通常來說會使用異步懶加載的方式來提升程序畫面的顯示速度,這通常會導致的一個問題是,程序畫面已經顯示,可是內容卻還在加載中。為了衡量這些異步加載資源所耗費的時間,我們可以在異步加載完畢之后調用activity.reportFullyDrawn()方法來告訴系統此時的狀態,以便獲取整個加載的耗時。
3、然后是Method Tracing:前面兩個方法提供了啟動耗時的總時間,可是卻無法提供具體的耗時細節。為了獲取具體的耗時分布情況,我們可以使用Method Tracing工具來進行詳細的測量。
4、最后是Systrace:我們可以在onCreate方法里面添加trace方法來聲明需要跟蹤的起止位置,系統會幫忙統計中間經歷過的函數調用耗時,并輸出報表。
總結
以上是生活随笔為你收集整理的Android性能优化典范 - 第6季的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的synchronized与v
- 下一篇: Android最佳性能实践(一):合理管