性能優化工具知識梳理(2) Systrace

1、概述

SystaceAndroid推出的性能優化工具,經過這個工具咱們能夠在實時操做的狀況下,得到某段時間內當前系統各個進程的運行時狀況,經過分析所生成的報表,咱們能夠定位出App卡頓的緣由。下面,咱們分如下兩部分介紹Systrace的相關知識:html

  • 獲取分析報表
  • 分析

2、獲取分析報表

第一步,就是要獲取分析報表,這個報表其實就是一個html網頁的形式,須要用Chrome瀏覽器來打開,咱們能夠經過下面幾種方法獲取:python

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文件,不須要進行轉換:bash

2.3 systrace.py可接受參數

systrace.py提供了不少可配置的參數,下面是官方文檔中對於參數的說明,在使用2.2方式的時候,咱們能夠根據須要選取參數進行配置: ide

3、具體分析

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 知識梳理系列:

相關文章
相關標籤/搜索