Android 效能優化 啟動優化

2021-10-24 09:45:32 字數 3792 閱讀 7859

1.3啟動優化工具

1.3.1 traceview

1.3.2 systrace

2.啟動優化

啟動優化的第一步就是要獲取啟動的時間,整個啟動邏輯的所需要的精確時長。根據各個方法的時長去定位哪些邏輯需要優化。首先我們如何獲取**的執行時間。如下

檢視啟動時間。適合線下模式

注意:使用命令前,adb需要配置環境變數

adb shell am start -w com.example.demo/com.example.demo.mainactivity
this time:最後乙個activity啟動耗時

total time;所有activity啟動耗時,因為有時候程式啟動涉及好幾個介面。

waittime:ams啟動actvity總耗時。

全稱:aspect oriented programming,適用於批量監控,統計等使用。

簡單使用方式:

1.依賴

project裡的build.gradle檔案新增

classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0'
module裡的build.gradle檔案新增

'android-aspectjx'

implementation 'org.aspectj:aspectjrt:1.8.+'

2.建立監聽類

/**

* 新增aspect註解,且建立方法,來去監聽activity每個方法執行的時間

* 方法名新增註解:

* @around 在被監聽的方法前後都執行邏輯。

* @before 在被監聽的方法執行前執行

* @after 在被監聽的方法後執行

* 語法解釋:call 呼叫

* (* com..)* 返回值

* com..具體的類

* init** init開頭的方法

* (..)任意引數

* */

@aspect

public

class

aopdemo

catch

(throwable throwable)

log.

d(tag, s+

" gettime: "

+(system.

currenttimemillis()

-start));

}}

3.被監聽的類和方法

無侵入 修改方便

圖形展示執行時間,執行緒具體任務。適合線下檢測狀態。

好處:定點埋點,高效快捷。

通過執行**,使用檔案的形式收集**執行邏輯的資訊。

生成檔案在sd卡:android/data/packagename/files/***.trace

debug.

startmethodtracing

("檔名"

)debug.

stopmethodtracing

()

wall time **執行時間

thread time cpu執行時間

缺點:執行時開銷嚴重,整體會變慢。

獲取核心資料,生成html報告。需要執行sdk裡systrace命令。

api 18 以上 推薦tracecompat

執行命令:

python /users/..

./sdk/platform-tools/systrace/systrace.py -b 3200

-t 5

tracecompat.

beginsection()

; tracecompat.

endsection()

;

輕量級,開銷小,反映cpu利用率

cputime和walltime 區別

walltime**執行時間

cputime**消耗cpu時間

非同步優化就是去分擔啟動頁面的其他任務,提高啟動頁的速度。

把程式初始化的載入工作放到子執行緒,是一種直接高效的形式。我們可以建立執行緒池服務物件,執行n個執行緒呼叫每個初始化任務即可;當然這些初始化的任務也有特殊的情況存在。如:需要上下文環境context,需要主線程的looper物件,又或者此任務需要在主線程執行。也就需要特殊處理,如傳入context,looper,handler物件。

缺點:**優雅度不好,閱讀性差。

有一種情況更為特殊,就是子任務之間存在依賴關係,這時候需要我們用到countdownlatch。定時器概念,初始化計數值,當減到為0時,就可以執行下乙個任務。

countdownlatch count=

newcountdownlatch(1

);//執行減一

count.

countdown()

;//如果為count==0,則開始執行下面邏輯

count.

await()

;

自定義一套啟動器,類似於執行緒池的原理,同時新增了任務之間的依賴關係處理,可以實現主線程執行和子執行緒執行,是否等待其他任務。

優點:充分利用cpu的多核,自動梳理執行流程

常規非同步的缺點:**不優雅,不好處理,如子任務有依賴關係。

1.抽取為task任務

2.所有關係生成乙個有向無環圖。

3.多執行緒的優先順序依次執行

**資源:

對於一些不緊急的任務,我我們可以延遲載入。這裡使用idlehandler

原始碼解析:

提前載入sharedprefrences

multidex之前載入,利用此階段cpu

類載入優化:提前非同步類載入

class.forname() 只載入類本身及靜態變數的引用類

new 可以額外載入類成員變數的引用類

啟動階段抑制gc

cpu 鎖頻 cpu的執行緒全部開啟

如何進行啟動優化的?

從過程進入主題,分析現狀,確認問題。

針對性優化,針對問題 怎麼優化問題

長期保持優化效果。 ci監控 啟動器

非同步問題?演進過程

詳細介紹啟動器

容易忽略的注意點;

cpu time wall time

注意延遲初始化優化

類載入cpu拉高

版本迭代導致啟動變慢的解決方式

結合ci

完善監控

android效能優化之啟動優化

解決方案 null null true drawable bg splash必要且耗時 mutidex 必要不耗時 首頁繪製 非必要耗時 資料上報,外掛程式初始化 非必要不耗時 直接去掉,需要時再載入。其他第三方元件的初始化 檢視日誌 將手機連線到android studio上,開啟logcat,不...

Android效能優化1 啟動優化

1 手機的啟動 開啟電源 通過bootloader將linux系統拉起 配置網路 檔案等等引導頁面 linux啟動 init程序 zygote程序建立jvm 開啟systemserver,開啟binder執行緒池和systemservicemanager 由這些服務開啟activitymanager...

Android效能優化之冷啟動優化

冷啟動 cold start 溫啟動 warm start 熱啟動 hot start adb shell am start w packagename packagename.activity 例如 adb shell am start w com.dateyou.test com.datayou...