Android效能優化--Inspact Code程式碼檢查
一.前言
在Android Studio中,Google還提供了很多程式碼分析工具,這些工具都集中在Android Studio的Analyze選單中
通過Inspect Code功能,可以讓IDE分析整個工程,類似於Android的Lint分析
Inspect Code不僅提供了Lint的檢測功能,還提供了一些其他的程式碼靜態分析結果,同時給出了大致的修改意見,你也可以選擇Code Cleanup功能來進行自動的程式碼修復,這兩個功能可以在Analyze選單中找到
在Analyze選單中,有幾個Dependencies選項,通過這幾個選項,可以快速分析專案的Dependencies依賴
- Analyze Data flow
這個功能用的不是很多,但是在某寫情況下,對於熟悉舊的程式碼非常有幫助,它可以追蹤資料流,瞭解該資料變數的來龍去脈,可以通過Dataflow from local variable的結果和Dataflow to local variable的結果顯示出來
二.Inspact Code 結果展示
其中
Android > Lint > PerFomance
能索引到程式碼中有些無用的語句,已經無用的圖片,應該修復掉.
Declaration redundancy 關於定義變數的警告
XML拼寫警告
還有一些其他方法,引用下別人總結的
Android > Lint > Accessibility
1.Image without contentDescription
[Accessibility] Missing ‘contentDescription’ attribute on image
contentDescription 這個屬性是為了給一些生理功能有缺陷的人使用應用程式提供方便的,比如有一個 ImageView 裡面放置一張色彩豐富的圖片,一些色弱色盲的人可能會分不清這張圖片中畫的是什麼東西。如果使用者安裝了輔助瀏覽工具比如 TalkBack,TalkBack 就會大聲朗讀出使用者目前正在瀏覽的內容。TextView控制元件TalkBack可以直接讀出裡面的內容,但是 ImageView TalkBack就只能去讀 contentDescription的值,告訴使用者這個圖片到底是什麼。
Android > Lint > Correctness
1.Layout Inflation without a Parent
Avoid passing ‘null’ as the view root (needed to resolve layout parameters on the inflated layout’s root element)
出現這條警告你肯定使用 LayoutInflater 類的方法載入佈局了,具體緣由請檢視這篇博文。
2.Missing commit() on SharedPreference editor
‘SharedPreferences.edit()’ without a corresponding ‘commit()’ or ‘apply()’ call
一般是因為你執行了 SharedPreference.Editor 的 put 方法然後忘了執行 apply 或 commit 方法。
3.Using inlined constants on older versions
這個是因為你呼叫的比你宣告的 minSdkVersion 級別更高的 API.
Android > Lint > Internationalization > Bidirectional Text
1.Using left/right instead of start/end attributes
這條警告建議你將佈局檔案(多為相對佈局)中宣告的 ×××Left 或 ×××Right 替換成對應的 ×××Start 或 ×××End 以相容從右至左的螢幕方向(這個取決於特定語境的閱讀習慣)。
Android > Lint > Performance
1.Overdraw: Painting regions more than once
直譯過來叫過度繪製,你應該明確當前的 subView 是否有覆蓋上一級 View 的需求,如果有可忽略此條提示
2.Unused resources
這個不用我過多解釋了吧,提示你專案裡未使用的資原始檔,請酌情刪除。
Android > Lint > Security
待續…………
Android > Lint > Usability
Using setJavaScriptEnabled
Using ‘setJavaScriptEnabled’ can introduce XSS vulnerabilities into your application, review carefully.
使用’setJavaScriptEnabled’可以將XSS漏洞引入到應用程式中,請仔細檢查確定有開啟 JS 的必要。
嗯,一般用到 WebView 的地方都有必要開啟 JS 支援。
待續…………
Android > Lint > Usability > Icons
1.Image defined in density-independent drawable folder
在密度無關的可繪製資料夾中定義的影象,我一般選擇忽略,原因改天專門開篇文章解釋。
Class structure
提示你類的結構可進一步優化的地方。
1.Field can be local
這個主要是有些變數可宣告為區域性變數。
2.’private’ method declared ‘final’
這個一般刪掉 final 符就行。
Control flow issues
1.Unnecessary ‘return’ statement
不必要的 return 語句,這個一般是你在返回型別為 void 的方法的方法體內使用了 return 語句,到底有沒有必要使用要視情況而定。比如你想在方法中加個條件判斷,如果不符合條件就提前返回方法,這個時候返回 void 型別的方法裡使用 return 語句是有必要的。
Declaration redundancy
1.Actual method parameter is the same constant
某個方法的某個引數在整個專案裡被呼叫的地方總是個固定不變的值,所以這個形參是否有宣告的必要呢?
2.Declaration access can be weaker
提示你類中的欄位或方法宣告的訪問許可權可優化。詳細部分一般提示 Can be private,嗯。
3.Declaration can have final modifier
某類的某個欄位可宣告為 常量 即新增 final 修飾符。
4.Method returns the same value
此提示常出現於建立選單以及選單的選擇點選回撥方法處,使返回父類的方法呼叫即可。
General
1.Default File Template Usage
這個你自己肯定能看懂,我就不說了。
Imports
一般提示你一些未使用的匯入語句,刪掉就好。(右鍵可快速刪掉)
Java language level migration aids
一些 JAVA 語言相關的優化建議。
Spelling
嗯。