一、概述
Systace
是Android
推出的效能優化工具,通過這個工具我們可以在實時操作的情況下,獲得某段時間內當前系統各個程式的執行時情況,通過分析所生成的報表,我們可以定位出App
卡頓的原因。下面,我們分以下兩部分介紹Systrace
的相關知識:
- 獲取分析報表
- 分析
二、獲取分析報表
第一步,就是要獲取分析報表,這個報表其實就是一個html
網頁的形式,需要用Chrome
瀏覽器來開啟,我們可以通過下面幾種方法獲取:
2.1 魅族手機提供的獲取方式
- 第一步:在
Flyme6
的手機上,進入**/設定/輔助功能/開發者選項/效能優化/效能日誌抓取**,可以設定是否開啟開關以及抓取的時間長度,設定完畢後按下音量下+電源鍵,這時候手機會震動一次,說明系統就開始在後臺進行跟蹤了。 - 第二步:進入需要分析的應用,進行一系列的操作,在過了設定的時間之後,手機會再次震動一次。
- 第三步:進入檔案管理器根目錄下的
PerformanceLog
資料夾,檢視距離當前時間最近的資料夾,我們可以看到裡面有兩個檔案,裡面就是我們上次抓取的結果,我們需要把它拷貝出來匯出到電腦上面: - 第四步:上面得到的這兩個檔案並不能直接開啟,我們需要使用到
Android SDK
中提供的轉換指令碼轉換上圖當中的systrace
檔案,systrace.py
,如果安裝了Android SDK
,那麼進入SDK目錄/platform-tools/systrace/
,執行下面的命令:
python systrace.py -o <轉換後需要儲存到的檔案路徑> --from-file=<手機匯出的systrace檔案路徑>
複製程式碼
例如,執行下面的語句,得到轉換後的分析報表mobile_systrace
2.2 直接採用指令碼抓取
上面2.1
方法的優點是簡便,隨時隨地都可以抓取日誌,並且不要求手機有root
許可權,而如果我們是在電腦前面除錯,那麼可以通過上面這個指令碼,執行更加細緻的配置,例如配置抓取的時間,抓取的範圍等等:
python systrace.py --time=<抓取時間長度> -o <轉換後所需要儲存到的檔案路徑> sched gfx view wm
複製程式碼
執行上面的命令後,然後去到要分析的介面進行操作,當到達指定的時間之後,就會在指定的目錄下生成*.html
檔案,我們可以直接開啟python_systrace
檔案,不需要進行轉換:
2.3 systrace.py
可接受引數
systrace.py
提供了很多可配置的引數,下面是官方文件中對於引數的說明,在使用2.2
方式的時候,我們可以根據需要選取引數進行配置:
三、具體分析
3.1 分析動畫卡頓問題
我們使用下面這段程式碼,在動畫執行的過程中,同時進行IO
操作,以模擬動畫卡頓的問題:
private void startAnimator() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1f);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mTv.setAlpha((float) animation.getAnimatedValue());
writeSomething();
}
});
valueAnimator.setDuration(1000);
valueAnimator.start();
}
private void writeSomething() {
OutputStream outputStream = null;
try {
outputStream = openFileOutput("systrace", MODE_APPEND);
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
for (int i = 0; i < 10000; i++) {
dataOutputStream.write(10);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製程式碼
之後,按照上面的方法匯出systrace
檔案,找到我們應用包名所對應的程式,可以看到許多紅色F
,這些就表明遇到了卡頓,如果正常時應當是綠色,如果出現了輕微卡頓,那麼為黃色,嚴重卡頓則為紅色:
F
,它會給出我們對應的建議:
我們也可以點選旁邊的alert
選項,它會列出所有的問題點:
更多文章,歡迎訪問我的 Android 知識梳理系列:
- Android 知識梳理目錄:www.jianshu.com/p/fd82d1899…
- 個人主頁:lizejun.cn
- 個人知識總結目錄:lizejun.cn/categories/