20條性能優化的建議 App性能優化的建議有哪些

20條建議1. itmap的合理使用:使用Bitmap過后, 就需要及時的調用recycle方法來釋放Bitmap占用的內存空間, 而不要等Android系統來進行釋放 。
代碼示例:

// 先判斷是否已經回收
【20條性能優化的建議 App性能優化的建議有哪些】if(bitmap != null && !bitmap.isRecycled){
bitmap.recycle;
bitmap = null;
}
System.gc;
2. 對常量使用static final修飾符
static final int intVal = 42; static final String strVal = “Hello, world!”;
將一個方法或類聲明為final不會帶來性能的提升, 但是會幫助編譯器優化代碼 。 舉例說, 如果編譯器知道一個getter方法不會被重載, 那么編譯器會對其采用內聯調用 。
3. 靜態方法代替虛擬方法
如果不需要訪問某對象的字段, 將方法設置為靜態, 調用會加速15%到20% 。 這也是一種好的做法, 因為你可以從方法聲明中看出調用該方法不需要更新此對象的狀態 。
4. 減少不必要的全局變量
盡量避免static成員變量引用資源耗費過多的實例, 比如Context, 因為Context的引用超過它本身的生命周期, 會導致Context泄漏 。 所以盡量使用Application這種Context類型 。 可以通過調用
Context.getApplicationContext或 Activity.getApplication輕松得到Application對象 。
5. 避免創建不必要的對象: 就是避免創建短命的臨時對象 。 減少對象的創建就能減少垃圾收集, 進而減少對用戶體驗的影響 。
例如:頻繁操作一個字符串時, 使用StringBuffer代替String 。
對于所有所有基本類型的組合:int數組比Integer數組好, 這也概括了一個基本事實, 兩個平行的int數組比 (int,int)對象數組性能要好很多 。 .避免使用浮點數
通常的經驗是, 在Android設備中, 浮點數會比整型慢兩倍 。
7. 使用實體類比接口好
假設你有一個HashMap對象, 你可以將它聲明為HashMap或者Map:
Map map1 = new HashMap;
HashMap map2 = new HashMap;
哪個更好呢?
按照傳統的觀點Map會更好些, 因為這樣你可以改變他的具體實現類, 只要這個類繼承自Map接口 。 傳統的觀點對于傳統的程序是正確的, 但是它并不適合嵌入式系統 。 調用一個接口的引用會比調用實體類的引用多花費一倍的時間 。 如果HashMap完全適合你的程序, 那么使用Map就沒有什么價值 。 如果有些地方你不能確定, 先避免使用Map, 剩下的交給IDE提供的重構功能好了 。 (當然公共API是一個例外:一個好的API常常會犧牲一些性能)
8. 訪問成員變量比訪問本地變量慢得多
for循環:不要在for的第二個條件中調用任何方法
反例:for(int i =0; i < this.getCount; i++) {}
正例:int count = this.mCount; int count = this.getCount;
for(int i =0; i < count; i++) {
}
9. 資源類對象在不使用的時候, 應該及時關閉它們, 方便它們的緩存數據能夠及時回收 。
例如:Cursor、File文件等都需要在finally中關閉資源性對象, 避免在異常情況下資源對象未被釋放的隱患
10. 注冊廣播接收器、注冊觀察者等需要在不使用的時候取消注冊 。
例如:假設在Activity中, 監聽系統的電話服務, 可以在Activity中定義一個PhoneStateListener的對象, 同時將它注冊到TelephoneManager服務中 。 對于Activity對象, 理論上要求Activity退出后該Activity的對象就會被釋放掉 。 但是如果在釋放Activity對象時, 忘記取消之前注冊的PhoneStateListener對象, 則會導致Activity無法被GC回收 。 如果不斷的進出這個Activity, 則最終會由于大量的Activity對象沒有辦法被回收而引起頻繁的GC情況, 甚至導致Out Of Memory 。
11. 有效的利用系統自帶的資源, Android系統內置了大量的資源, 比如字串、顏色定義、常用Icon圖片、動畫樣式、及簡單的布局, 沒有特殊要求, 資源可以在程序中直接引用 。 這樣不僅減少內存的開銷, 還可以減少apk的大小 。
12. 視圖復用, 使用ViewHolder實現ConvertView復用, 這基本上是所有容器控件的處理方式, 如ListView、GridView等 。
13. 使用最優的數據類型, 比較少的對象數時, ArrayMap替換HashMap的使用, 避免使用枚舉, 枚舉變量非常方便, 但不幸的是它會犧牲執行的速度和并大幅增加文件體積 。
14. 圖片內存優化
Android提供的多種位圖格式中, 最高的是RGB_8888, 也是系統默認的位圖格式, 其他幾種都減少位圖通道, 可以減少內存開銷, 如一些局部圖片、小屏幕手機或者對圖片質量要求不高的場景, 均可以使用RGB_565, 或者ARGB_4444等圖像格式 。

推薦閱讀