解決步驟:
1颁湖、去掉maputil,不需要展示
2例隆、去除百度地圖的定位甥捺,改用導航自帶定位回調(diào)
3、優(yōu)化權(quán)限申請
分析工具:Android Studio自帶profiler工具
主要參數(shù):(出處)
Native:從 C 或 C++ 代碼分配的對象內(nèi)存裳擎。
即使您的應(yīng)用中不使用 C++涎永,您也可能會看到此處使用的一些原生內(nèi)存思币,因為 Android 框架使用原生內(nèi)存代表您處理各種任務(wù)鹿响,如處理圖像資源和其他圖形時,即您編寫的代碼采用 Java 或 Kotlin 語言谷饿。Graphics:圖形緩沖區(qū)隊列向屏幕顯示像素(包括 GL 表面惶我、GL 紋理等等)所使用的內(nèi)存。 (請注意博投,這是與 CPU 共享的內(nèi)存绸贡,不是 GPU 專用內(nèi)存。)
分析過程:
這里我們主要觀察cpu變化和內(nèi)存變化毅哗,內(nèi)存變化指標主要觀察graphics(圖形繪制內(nèi)存指標听怕,以下簡稱gp)和native數(shù)據(jù)變化
注意:我們這里只看變化值
step1:去掉mapView:
去掉maputil和mapView之前,進入activity虑绵,gp暴漲了27.4m尿瞭,native也漲了19.6m,分析了下cpu加載方法耗時發(fā)現(xiàn)代碼內(nèi)結(jié)合maputil加載了一個mapView翅睛,且每秒n次在不斷刷新声搁,導致onCreat方法加載耗時接近1000ms
優(yōu)化后,gp上漲了13.4m捕发,native漲了11.9m:
step2:去除百度地圖的定位疏旨,改用導航自帶定位回調(diào):
代碼里有涉及到定時獲取定位去獲取接口數(shù)據(jù),我們直接把接口放到導航自帶的定位回調(diào)即可扎酷,此處忽略性能優(yōu)化前后對比檐涝,少一個定時定位模塊效果顯而易見。
step3:優(yōu)化權(quán)限申請:
我們發(fā)現(xiàn)兩個彈窗從顯示到消失過程native幾乎沒有變化法挨,gp卻從62.6m暴降到28.7m再到16.7m谁榜,整整降了45.9m,在此過程中,不僅有彈窗顯示坷剧,也有權(quán)限申請等過程惰爬,代碼包含for循環(huán)等邏輯。
我們自己嘗試寫了一個同樣的dialog展示撕瞧,發(fā)現(xiàn)gp在dialog消失后下降了10m左右陵叽,這個比較符合第二個彈窗消失的消耗,那么第一個彈窗消失的過程除去10m消耗丛版,還剩余24m左右未知消耗巩掺。
我們考慮到在Android9.0以后對app耗電限制的問題,在這里我們先申請權(quán)限页畦,每次進入之前先檢查白名單胖替,確認已經(jīng)拿到權(quán)限后再進入軌跡導航。
todo:不過目前在華為榮耀的Android9.0機型有點問題豫缨,該機型的9.0版本并沒有白名單独令。