Systace
是Android
推出的性能優化工具,經過這個工具咱們能夠在實時操做的狀況下,得到某段時間內當前系統各個進程的運行時狀況,經過分析所生成的報表,咱們能夠定位出App
卡頓的緣由。下面,咱們分如下兩部分介紹Systrace
的相關知識:html
第一步,就是要獲取分析報表,這個報表其實就是一個html
網頁的形式,須要用Chrome
瀏覽器來打開,咱們能夠經過下面幾種方法獲取:python
Flyme6
的手機上,進入**/設置/輔助功能/開發者選項/性能優化/性能日誌抓取**,能夠設置是否打開開關以及抓取的時間長度,設置完畢後按下音量下+電源鍵,這時候手機會震動一次,說明系統就開始在後臺進行跟蹤了。PerformanceLog
文件夾,查看距離當前時間最近的文件夾,咱們能夠看到裏面有兩個文件,裏面就是咱們上次抓取的結果,咱們須要把它拷貝出來導出到電腦上面:
Android SDK
中提供的轉換腳本轉換上圖當中的systrace
文件,systrace.py
,若是安裝了Android SDK
,那麼進入SDK目錄/platform-tools/systrace/
,執行下面的命令:python systrace.py -o <轉換後須要保存到的文件路徑> --from-file=<手機導出的systrace文件路徑>
複製代碼
例如,執行下面的語句,獲得轉換後的分析報表mobile_systrace
瀏覽器
上面2.1
方法的優勢是簡便,隨時隨地均可以抓取日誌,而且不要求手機有root
權限,而若是咱們是在電腦前面調試,那麼能夠經過上面這個腳本,運行更加細緻的配置,例如配置抓取的時間,抓取的範圍等等:性能優化
python systrace.py --time=<抓取時間長度> -o <轉換後所須要保存到的文件路徑> sched gfx view wm
複製代碼
執行上面的命令後,而後去到要分析的界面進行操做,當到達指定的時間以後,就會在指定的目錄下生成*.html
文件,咱們能夠直接打開python_systrace
文件,不須要進行轉換:bash
systrace.py
可接受參數systrace.py
提供了不少可配置的參數,下面是官方文檔中對於參數的說明,在使用2.2
方式的時候,咱們能夠根據須要選取參數進行配置: ide
咱們使用下面這段代碼,在動畫執行的過程當中,同時進行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
選項,它會列出全部的問題點: