android 內存優化(二) 性能優化

1)減少view層級,約束佈局,相對佈局,儘可能減少佈局層次
2)<include>和<merge> view可見的時候才用,用viewstub加載不佔資源 
3)避免創建不必要的對象
4)圖片像素對應的到相應的xdpi目錄
5)循環中儘量用int變量賦值遍歷,不要老是getsize之類的,循環調用效率低
6)SparseArray比hashmap效率高
7)string與stringbuffer
8)對常量使用static final修飾符
9)for(a:array){}
10)多使用系統封裝好的API string字符運算 indexOf() contains 數組拷貝System.arraycopy() 效率比自己寫的邏輯效率高
11)避免在內部調用Getters/Setters方法 直接賦值拿值效率高些
12)少使用枚舉 佔資源
13)內存抖動-短時間內大量的創建垃圾對象,觸發GCC,卡頓,
儘量避免在循環體內創建對象,應該把對象創建移到循環體外。
注意自定義View的onDraw()方法會被頻繁調用,所以在這裏面不應該頻繁的創建對象。
當需要大量使用Bitmap的時候,試着把它們緩存在數組中實現複用。
對於能夠複用的對象,同理可以使用對象池將它們緩存起來。
主線程不要放耗時操作
GC是無法避免的,我們要避免的是頻繁的GC,因此這裏的優化實質上是內存優化
14)Executor、 AsyncTask、 HandlerThead、 IntentService 如何選擇
HandlerThead就不要用,HandlerThead設計目的就是爲了主界面死循環刷新界面,無其他應用場景.
能用線程池就用線程池,因爲最簡單.
涉及後臺線程推送任務到UI線程,可以使用Handler或AsyncTask
Service:就是爲了做後臺任務,不要UI界面,需要持續存活.有複雜的需要長期存活/等待的場景使用Service.
IntentService:屬於Service.當我們需要使用Service,且需要後臺代碼執行完畢後該Service自動被銷燬,使用IntentService.
15)強引用 軟引用 弱引用 
強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器絕不會回收它。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足的問題。
如果一個對象只具有弱引用,那麼在垃圾回收器線程掃描的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由於垃圾回收器是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。弱引用也可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。
弱引用與軟引用的根本區別在於:只具有弱引用的對象擁有更短暫的生命週期,可能隨時被回收。而只具有軟引用的對象只有當內存不夠的時候才被回收,在內存足夠的時候,通常不被回收。

https://blog.csdn.net/u010672559/article/details/103178632 android 內存優化(一) 防止內存泄漏注意事項

https://blog.csdn.net/u010672559/article/details/103178663 android 內存優化(二) 性能優化

https://blog.csdn.net/u010672559/article/details/81098534 android 內存優化(三) 內存優化工具-MAT的使用及實例分析

https://blog.csdn.net/u010672559/article/details/81223122 android 內存優化(四) 性能優化-Systrace分析UI性能-含demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章