POST TIME:2018-12-03 17:14
注:你的app為什么會卡?為什么占用大內存?應該怎么解決?這篇文章會給你答案。
20 條建議1. itmap的合理使用:使用Bitmap過后,就需要及時的調用recycle()方法來釋放Bitmap占用的內存空間,而不要等Android系統來進行釋放。
代碼示例:
// 先判斷是否已經回收
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. 圖片內存優化