讀古今文學網 > Android程序設計:第2版 > 視圖調試和優化 >

視圖調試和優化

Android SDK提供了一些工具可以幫助理解視圖樹的行為。其中第一個工具最近被稱為layoutopt——而很多已經集成到新的名為Lint的工具中。layoutopt是個命令行工具,而Lint不但可以用於命令行,而更常見的方式是在Eclipse中使用。Lint工具會對組成應用佈局的XML文件做一些即時檢查。

任何在Android系統上做了一段時間開發的開發人員都經常受到以下的困擾:某個XML資源文件(佈局文件或菜單文件)在語義上是正確的,但是它包含一些語法錯誤。如果處理res目錄的aapt工具無法構建gen目錄,該項目中會有一半的文件無法編譯(因為缺失R類)。如果你使用Eclipse開發,整個項目就會顯示一片紅,到處都是錯誤——但就是找不到真正的錯誤原因。幸運的是,Lint工具可以幫助定位這類問題。

此外,Lint還可用於識別項目資源中的潛在問題。它會做合理性檢查,查看Android開發工具每次的發佈版本。在Eclipse中,只要資源文件發生了變化,就會觸發Lint工具運行,Lint發現的問題既會作為標準的Eclipse告警信息顯示,也會在Lint告警窗口顯示。

有時Lint還會識別出你都沒有意識到的問題。它有時會研究如何進行重構來解決問題。Lint工具還在不斷的開發測試中,雖然有時會出現誤報,但是它也會高亮顯示潛在的問題。理解問題本質並驗證該問題確實無關緊要,但這個過程是非常必要的。

Lint是通過查看源代碼進行分析的靜態分析器,因此,它發現問題無法面面俱到。比如,Lint無法查看動態添加到視圖中的widget。幸運的是,Android工具箱還提供了分析正在運行的應用的實際視圖樹工具:Hierarchy Viewer。Hierarchy Viewer工具提供不同的模式,支持不同的功能。雖然之前Eclipse整合了Hierarchy Viewer的部分功能,在最新版本中這些視圖已經無法工作。Hierarchy Viewer必須通過命令行執行。它在SDK文件夾工具中,最適合在Android版本9或更新的操作系統中使用。

Hierarchy Viewer類似一個調試器,可以分析正在運行的應用。為了正常工作,它必須能夠找到連上網絡的設備或模擬器。當Hierarchy Viewer連接到正在運行的設備上,在最上方的按鈕會提供下載視圖層次(view hierarchy)的工具。按下該按鈕,屏幕顯示如圖6-9所示。

圖6-9:Action按鈕

視圖層次窗口顯示了很多信息,工具箱文檔較詳細地描述了其使用方式。但是,其最重要的功能是可以馬上查看整棵視圖樹。

正如你將在第8章所見到的,視圖樹越深,繪製視圖樹的代價就會呈爆炸式增長。對應用進行優化的一個方面就是使視圖樹盡量扁平化。從圖6-9可以看出一個窗口的視圖樹結構有多深,並確定如何減少該樹的深度。

渲染包含三個階段:測量(measure)、佈局(layout)和繪製(draw),三種顏色的小圓點可以體現出每個階段視圖執行所花的時間。綠色圓點表示其時間小於該窗口視圖的平均執行時間;黃色圓點表示視圖執行時間大於該窗口視圖的平均執行時間;而紅色圓點表示整棵樹中執行時間最長的視圖。這種對視圖樹的粗略比較可以很明顯地指出繪製階段存在的問題,可以幫助定位問題所在。

本章介紹了Android控制器接口整體上是如何工作的,及操作其基礎組件所需的工具:窗口、視圖和事件。以下幾章會運用這些概念,並進一步描述如何構建你自己的用戶界面。