基本的優(yōu)化總結(二)

導言

上一篇描述了通過Systrace分析繪制的問題,里面也有提到過,某一幀繪制過久,那么這可能是代碼等地方有問題,具體分析代碼問題,這時候就輪到TraceView發(fā)揮作用了

基礎

TraceView有兩種使用模式:
1.可以在DDMS里面手動開啟,然后再手動停止,然后生成的trace默認為這段時間內(nèi)的記錄,常用于在不確定具體卡頓代碼的情況下

2.可以在代碼中指定開始和結束

 Debug.startMethodTracing("test");
 ...
 Debug.stopMethodTracing();

常用于分析指定代碼或者具體操作

面板分析

實例

看一下重點指標就可以了
Cpu Time:實際執(zhí)行的時間(不包括線程被掛起的等待時間)
Real Time:執(zhí)行的總時長(Cpu Time+等待的時間)
Calls+RecurCalls:函數(shù)執(zhí)行的總次數(shù)(包括遞歸執(zhí)行)

簡單的分析方法就是考慮一個函數(shù)的執(zhí)行次數(shù)和單次執(zhí)行時間,執(zhí)行次數(shù)過多的話要考慮是不是有過度調(diào)用或者遞歸的問題,執(zhí)行時間過長的話要考慮進行優(yōu)化操作

調(diào)用鏈分析

可以通過選擇具體的某個函數(shù)來看到該函數(shù)下面調(diào)用的其余函數(shù)的具體耗時,從而鏈式的向下分析


函數(shù)調(diào)用情況

從圖中可以看出,當前函數(shù)內(nèi)部的三個函數(shù)基本上瓜分了執(zhí)行時間,那么后續(xù)就可以對這三個函數(shù)繼續(xù)進行調(diào)用鏈分析,分析的目的是在最后能夠對執(zhí)行時間進行優(yōu)化。

舉例說明

這里通過代碼中指定的方式來觀察一個網(wǎng)絡請求的開始到結束
我們這里就簡單觀察一下數(shù)據(jù)解析,因為返回數(shù)據(jù)都是為JSON串,統(tǒng)一都需要轉換為對象處理,這時候轉換的速度也就是我們關心的指標,這里對比一下Gson和FastJson的情況,對象統(tǒng)一不采用注解,僅僅是提供一致的字段名及對應的get/set方法


Gson的結果
FastJson的結果

從結果上面很直觀的看出來FastJson的解析效率高一些,從追求性能的方向上面考慮可能使用FastJson會相對好一些。
同時也要注意到Json解析是一個相對耗時的操作,應當盡可能的放入到工作線程中處理而不是阻塞主線程,畢竟480ms已經(jīng)相當于30幀左右的時間了

總結

TraceView常用于分析方法的具體執(zhí)行時間,可以作為一種常用的調(diào)優(yōu)手段。
當然常規(guī)的使用模式應該是先通過Systrace來發(fā)現(xiàn)UI卡頓問題,然后再使用TraceView進行細化分析,這樣配合會更加的合適

文章系列:
基本的優(yōu)化總結(一)
基本的優(yōu)化總結(二)
基本的優(yōu)化總結(三)
基本的優(yōu)化總結(四)
基本的優(yōu)化總結(五)
基本的優(yōu)化總結(六)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 今天晚上我和媽媽做了一個酸奶蛋糕,非常好吃,我以前在幼兒園學過,今天我是主廚媽媽幫忙。制作方法是:先把雞蛋...
    碎片幻影閱讀 603評論 0 1
  • 1、首先需要添加引用:NPOI.dll文件 2、using NPOI.SS.UserModel; using ...
    你我知道的事閱讀 567評論 0 0
  • 一大早,她就被刺耳的電話鈴聲吵醒,老公接了電話,起床要走,她懶懶地問:“起來給你做點吃的吧?”“不用了,還早,你再...
    麗日晴空閱讀 248評論 0 0

友情鏈接更多精彩內(nèi)容