Android 性能優化--APP啓動、UI優化

Android 性能優化–APP啓動、UI優化

安卓系統啓動流程

  1. 打開電源 引導芯片代碼加載引導程序Boot Loader到RAM中去執行
  2. BootLoader把操作系統拉起來
  3. Linux 內核啓動開始系統設置,找到一個init.rc文件啓動初始化進程
  4. init進程初始化和啓動屬性服務,之後開啓Zygote進程
  5. Zygote開始創建JVM並註冊JNI方法,開啓SystemServer
  6. 啓動Binder線程沲和SystemServiceManager,並啓動各種服務
  7. AMS啓動Launcher

Activity啓動流程

大致流程如下
在這裏插入圖片描述
詳細可以參考 Activity啓動流程源碼分析

優化啓動的Activity

Activity的Theme優化

在老的系統版本採用以下主題,會引起黑白屏問題,現在的版本默認使用透明處理

文件   res/values/styles.xml
白屏    <style name="AppTheme" parent="Theme.AppCompat.Light">
黑屏    <style name="AppTheme">

解決辦法:自定義啓動Activity的主題,比如

<style name="AppTheme.Launcher">
     <item name="android:windowDisablePreview">true</item>
    <item name="android:windowBackground">@null</item>
</style>

Activity的佈局優化

Button(View)的顯示過程
  1. LayoutInflater加載佈局文件到內存,轉化爲包含大小位置等信息的Button對象
  2. CPU經過計算,處理成多爲矢量圖
  3. GPU格柵化(參考’圖像渲染機制’)進行像素填充顯示
佈局優化方案
  • 減少過度繪製,我應該減少紅色的顯示,比如:
    減少背景重複,如“Activity的Theme優化”;
    使用裁減減少控件之間的重合部分;
    Android7.0之後invalidate()不再執行測量和佈局動作。
    在這裏插入圖片描述

  • 減少佈局層級嵌套,採用ConstraintLayout<merge>

  • 採用<include>複用佈局,可以減少GPU重複工作

  • 採用ViewStub按需加載

常用優化工具
  1. GPU過度繪製查看
    手機開發者模式–>調試GPU過度繪製–>顯示過度繪製區域。

  2. 查看UI層級 sdk\tools\bin\uiautomatorviewer.bat

  3. 查看UI層級嵌套及性能 sdk\tools\monitor.bat
    點擊下圖三色圓疊加地方後,可以分別顯示頁面measure、layout、draw的時間,紅色性能最差,綠色最快。

Activity的代碼優化

  • 開啓混淆
  • 生命週期內方法避免耗時操作

優化Application初始化

一般我們會在onCreate()中放一些初始化,如果初始化耗時,就會引起應用啓動慢

優化方案:

  • 不放耗時初始化
  • 異步初始化非必須業務
  • 將部分初始放啓動頁(不僅僅是爲了顯示廣告)

Java代碼性能分析方法

logcat查看啓動時間

adb logcat -v time |grep com.xxx.xxx
查看logcat中包名"com.xxx.xxx"的相關日誌

Profiler查看啓動時間

  • 在要調試的代碼前後添加如下代碼,啓動應用,會在data/data/com.xxx.xx/files/app.trace中生成調試的trace信息
val file = File(filesDir, "app.trace")
Debug.startMethodTracing(file.absolutePath)
.....//要監控的代碼塊
Debug.stopMethodTracing()
  • 將以上文件導出,並用AS打開,可以進一步分析耗時信息
    adb pull data/data/com.xxx.xxxx/files/app.trace
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章