TraceView與Lint如何在Android應(yīng)用中使用

本篇文章為大家展示了TraceView與Lint如何在Android 應(yīng)用中使用,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

蒲江縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

Android lint工具是Android studio中集成的一個(gè)代碼提示工具,它主要負(fù)責(zé)對你的代碼進(jìn)行優(yōu)化提示,包括xml和java文件,很強(qiáng)大。編寫完代碼及時(shí)進(jìn)行l(wèi)int測試,會讓我們的代碼變得非常規(guī)范而且避免代碼冗余。讓我們及時(shí)發(fā)現(xiàn)代碼中隱藏的問題。

lint的使用時(shí)非常簡單的,我看可以用它實(shí)現(xiàn)代碼布局的優(yōu)化,Java代碼的優(yōu)化,不過我覺得根本解決問題還是得依賴于開發(fā)者的素質(zhì)。

例子:我們需要刪除掉一些無用的變量和布局文件等,這對代碼的冗余有很大的幫助。

TraceView與Lint如何在Android 應(yīng)用中使用

TraceView與Lint如何在Android 應(yīng)用中使用

TraceView與Lint如何在Android 應(yīng)用中使用

代碼提示我們在6行需要為ImageView添加ContentDescription屬性,突然感覺好強(qiáng)大。

其實(shí)我們還可以用它自定義搜索,主要是刪除一些無用的文件用的。

TraceView與Lint如何在Android 應(yīng)用中使用

TraceView與Lint如何在Android 應(yīng)用中使用

TraceView與Lint如何在Android 應(yīng)用中使用

然后按要求優(yōu)化下代碼就好了。

TraceView

TraveView是Android studio集成的一個(gè)性能優(yōu)化工具,相信很多人都用過它,之前也專門講過,它主要計(jì)算工程內(nèi)方法運(yùn)行所占用的時(shí)間,調(diào)用次數(shù),以此來優(yōu)化App運(yùn)行效率。

使用TraceView主要有兩種方式:

1.最簡單的方式就是直接打開DDMS,選擇一個(gè)進(jìn)程,然后按上面的“Start Method Profiling”按鈕,等紅色小點(diǎn)變成黑色以后就表示TraceView已經(jīng)開始工作了。然后我就可以滑動一下列表(現(xiàn)在手機(jī)上的操作肯定會很卡,因?yàn)锳ndroid系統(tǒng)在檢測Dalvik虛擬機(jī)中每個(gè)Java方法的調(diào)用,這是我猜測的)。操作最好不要超過5s,因?yàn)樽詈檬沁M(jìn)行小范圍的性能測試。然后再按一下剛才按的按鈕,等一會就會出現(xiàn)上面這幅圖,然后就可以開始分析了。

2.第2種方式就是使用android.os.Debug.startMethodTracing();和android.os.Debug.stopMethodTracing();方法,當(dāng)運(yùn)行了這段代碼的時(shí)候,就會有一個(gè)trace文件在/sdcard目錄中生成,也可以調(diào)用startMethodTracing(String traceName) 設(shè)置trace文件的文件名,最后你可以使用adb pull /sdcard/test.trace /tmp 命令將trace文件復(fù)制到你的電腦中,然后用DDMS工具打開就會出現(xiàn)第一幅圖了

TraceView與Lint如何在Android 應(yīng)用中使用

步驟:1.選擇你要調(diào)試的進(jìn)程。 
          2.點(diǎn)擊start mothod profiling,待圖標(biāo)變黑。 
          3.選擇sample base profiling,等待一會,然后再次點(diǎn)擊這個(gè)按鈕停止(開始的時(shí)候紅點(diǎn)會變成灰色小方塊,停止的時(shí)候再次點(diǎn)擊這個(gè)按鈕就               好了)

注意事項(xiàng):在第三步的時(shí)候,需要選擇監(jiān)聽的屬性。

Trace base profiling

整體監(jiān)聽,項(xiàng)目中所有方法都會監(jiān)聽,資源消耗比較大。

sample base profiling

抽樣監(jiān)聽,以指定的頻率進(jìn)行抽樣調(diào)查,一般不要超過5s,需要較長時(shí)間獲取準(zhǔn)確的樣本數(shù)據(jù)。

再次點(diǎn)擊start mothod profiling,就會生成檢測樣本。

TraceView與Lint如何在Android 應(yīng)用中使用

整個(gè)界面包括上下兩部分,上面是你測試的進(jìn)程中每個(gè)線程的執(zhí)行情況,每個(gè)線程占一行;下面是每個(gè)方法執(zhí)行的各個(gè)指標(biāo)的值。

上面一部分是你測試進(jìn)程的中每個(gè)線程運(yùn)行的時(shí)間線,下圖中可以可以看到,主要只有一個(gè)main線程在執(zhí)行。

下面是分析面板(Profile Panel) - 每一列內(nèi)容 

Inclusive time - 函數(shù)本身運(yùn)行花費(fèi)時(shí)間 + 函數(shù)調(diào)用其他函數(shù)時(shí)間
Exclusive time - 函數(shù)本身運(yùn)行花費(fèi)時(shí)間。
Calls + RecurCall/Total 調(diào)用 + 重復(fù)調(diào)用次數(shù) / 函數(shù)總調(diào)用次數(shù)
Cpu Time/Call 總的Cpu時(shí)間與總的調(diào)用次數(shù)之比

TraceView與Lint如何在Android 應(yīng)用中使用

Profile Panel面板有一些參數(shù)需要注意下

列名描述
Name該線程運(yùn)行過程中所調(diào)用的函數(shù)名
Incl Cpu Time某函數(shù)占用的CPU時(shí)間,包含內(nèi)部調(diào)用其它函數(shù)的CPU時(shí)間
Excl Cpu Time某函數(shù)占用的CPU時(shí)間,但不含內(nèi)部調(diào)用其它函數(shù)所占用的CPU時(shí)間
Incl Real Time某函數(shù)運(yùn)行的真實(shí)時(shí)間(以毫秒為單位),內(nèi)含調(diào)用其它函數(shù)所占用的真實(shí)時(shí)間
Excl Real Time某函數(shù)運(yùn)行的真實(shí)時(shí)間(以毫秒為單位),不含調(diào)用其它函數(shù)所占用的真實(shí)時(shí)間
Call+Recur Calls/Total某函數(shù)被調(diào)用次數(shù)以及遞歸調(diào)用占總調(diào)用次數(shù)的百分比
Cpu Time/Call某函數(shù)調(diào)用CPU時(shí)間與調(diào)用次數(shù)的比。相當(dāng)于該函數(shù)平均執(zhí)行時(shí)間
Real Time/Call同CPU Time/Call類似,只不過統(tǒng)計(jì)單位換成了真實(shí)時(shí)間

1. Incl Cpu Time

define inclusive : 全包括的

上圖中可以看到0(toplevel) 的Incl Cpu Time 占了100%的時(shí)間,這個(gè)不是說100%的時(shí)間都是它在執(zhí)行,請看下面代碼:

public void top() {

 a();

 b();

 c();

 d();

}

Incl Cpu Time表示方法top執(zhí)行的總時(shí)間,假如說方法top的執(zhí)行時(shí)間為10ms,方法a執(zhí)行了1ms,方法b執(zhí)行了2ms,方法c執(zhí)行了3ms,方法d執(zhí)行了4ms(這里是為了舉個(gè)栗子,實(shí)際情況中方法a、b、c、d的執(zhí)行總時(shí)間肯定比方法top的執(zhí)行總時(shí)間要小一點(diǎn))。

而且調(diào)用方法top的方法的執(zhí)行時(shí)間是100ms,那么:


  Incl Cpu Time
top 10%
 a10%
 b20%
 c30%
 d40%

從上面圖中可以看到:

toplevel的 Incl Cpu Time 是1110.943,而io.bxbxbai.android.examples.activity.ExpandableLayoutMainActivity$SimpleAdapter.getItemView方法的Incl Cpu Time為12.859,說明后者的Incl Cpu Time % 約為1.2%

這個(gè)指標(biāo)表示 這個(gè)方法以及這個(gè)方法的子方法(比如top方法中的a、b、c、d方法)一共執(zhí)行的時(shí)間

2. Excl Cpu Time

理解了Incl Cpu Time以后就可以很好理解Excl Cpu Time了,還是上面top方法的栗子:

方法top 的 Incl Cpu Time 減去 方法a、b、c、d的Incl Cpu Time 的時(shí)間就是方法top的Excl Cpu Time 了

3. Incl Real Time

這個(gè)感覺和Incl Cpu Time 差不多,第7條會講到。

4. Excl Real Time

同上

5. Calls + Recur Calls / Total

這個(gè)指標(biāo)非常重要!

它表示這個(gè)方法執(zhí)行的次數(shù),這個(gè)指標(biāo)中有兩個(gè)值,一個(gè)Call表示這個(gè)方法調(diào)用的次數(shù),Recur Call表示遞歸調(diào)用次數(shù),看下圖:

TraceView與Lint如何在Android 應(yīng)用中使用

我選中了一個(gè)方法,可以看到這個(gè)方法的Calls + Recur Calls 值是14 + 0,表示這個(gè)方法調(diào)用了14次,但是沒有遞歸調(diào)用

從Children這一塊來看,很多方法調(diào)用都是13的倍數(shù),說明父方法中有一個(gè)判斷,但是這不是重點(diǎn),有些Child方法調(diào)用Calls為26,這說明了這些方法被調(diào)用了兩遍,是不是可能存在重復(fù)調(diào)用的情況?這些都是可能可以優(yōu)化性能的地方。

6. Cpu Time / Call

重點(diǎn)來了?。。。。。。。。?!

TraceView與Lint如何在Android 應(yīng)用中使用

這個(gè)指標(biāo)應(yīng)該說是最重要的,從上圖可以看到,133這個(gè)方法的調(diào)用次數(shù)為20次,而它的Incl Cpu Time為12.859ms,那么133方法每一次執(zhí)行的時(shí)間是0.643ms(133這個(gè)方法是SimpleAdapter的getItemView方法)

對于一個(gè)adapter的getView方法來說0.643ms是非??斓模ㄒ?yàn)檫@個(gè)adapter中只有一個(gè)TextView,我為了測試用的)

如果getView方法執(zhí)行時(shí)間很長,那么必然導(dǎo)致列表滑動的時(shí)候產(chǎn)生卡頓現(xiàn)象,可以在getView方法的Children方法列表中找到耗時(shí)最長的方法,分析出現(xiàn)問題的原因:

  1. 是因?yàn)橛羞^多的計(jì)算?

  2. 還是因?yàn)橛凶x取SD卡的操作?

  3. 還是因?yàn)閍dapter中View太復(fù)雜了?

  4. 還是因?yàn)樾枰泻芏嗯袛?,設(shè)置View的顯示還是隱藏

  5. 還是因?yàn)槠渌颉?/p>

7. Real Time / Call

Real Time 和 Cpu Time 我現(xiàn)在還不太明白它們的區(qū)別,我的理解應(yīng)該是:

  1. Cpu Time 應(yīng)該是某個(gè)方法占用CPU的時(shí)間

  2. Real Time 應(yīng)該是這個(gè)方法的實(shí)際運(yùn)行時(shí)間

上述內(nèi)容就是TraceView與Lint如何在Android 應(yīng)用中使用,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站題目:TraceView與Lint如何在Android應(yīng)用中使用
鏈接地址:http://www.muchs.cn/article8/jiopop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、域名注冊、定制開發(fā)、全網(wǎng)營銷推廣搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名