如果使用listview或者gridview,注意convertview復用以及viewholder的使用,可以不用每次都建立新的布局以及進行findviewbyid這樣費時的操作,即使某種itemtype型別的itemview數量只有乙個。推薦使用recyclerview,功能更強大,效能更好,並且為我們封裝好了view復用工作。
android中建立內部類的情況有很多,例如建立viewholder,adapter等等。如果可以,應該盡量使用靜態內部類。一方面,靜態內部類不持有外部類的引用,可以一定程度上防止記憶體洩漏的風險;另一方面,靜態內部類不能訪問外部類非靜態方法,編譯時不用為內部類生成訪問外部類的介面。
sparsearray底層keys和values分別使用陣列儲存,新增、刪除等操作使用binary search二分查詢;使用int基本型別作為key型別,避免autobox帶來的效能損失;另外,刪除操作並不會真的直接移除key和value,只是做了乙個deleted標記,特定時候再統一gc。類似的還有sparsebooleanarray、sparseintarray、sparselongarray。
android對於記憶體較為敏感,而enum會帶來額外的記憶體開銷,在沒有必要需求的情況下,例如,定義幾個int型別常量type,可以考慮使用final static int代替。官方文件說大概會比靜態常量大2倍多。具體計算分析可以參考這篇介紹:android 中的 enum 到底佔多少記憶體?該如何用?。
很容易造成記憶體頻繁分配、**,造成記憶體抖動現象,加大dalvik虛擬機器gc壓力。
避免background重複繪製,耗效能。可適當使用viewstub標籤優化效能,減少不必要view的繪製。自定義元件時,可考慮使用merge標籤減少層級。使用releativelayout代替linearlayout完成複雜布局,減少layout層級,單就releativelayout和linearlayout來說,releativelayout效能不如linearlayout,但是如果可以減少層級,是划算的。
開啟proguard選項,打包時可以剔除多餘的**,並且對**進行混淆,保證**安全的同時,一定程度上也可以減小dex包大小。需要注意,如果**中使用了反射可能會報錯,可以在proguard rule中配置不對某些特定的類進行混淆來解決問題。另外,開啟了proguard可能對除錯也有影響,導致斷點走不到或者檢視不到變數值。解決辦法是只在release環境下才開啟proguard選項,debug模式下不開啟。
buildtypes
debug
}
public
static bitmap resizebitmap(string filename, int requiredwidth, int requiredheight)
bitmapfactory.options的injustdecodebounds屬性設定為true時,不真正載入bitmap到記憶體中,但是bitmap的寬高等屬性都能獲取到。經過比例縮放計算後,我們可以設定bitmapfactory.options的insamplesize值,表示bitmap的取樣大小,即寬高為原始寬高的幾分之一,這時候再載入就可以達到節省記憶體的效果。注意:insamplesize的值會自動向下優化為最接近的2的n次方。 Android效能優化
android效能優化 1.http用gzip壓縮,設定連線超時時間和響應超時時間 http請求按照業務需求,分為是否可以快取和不可快取,那麼在無網路的環境中,仍然通過快取的httpresponse瀏覽部分資料,實現離線閱讀。2.listview 效能優化 1 復用convertview 在geti...
Android效能優化
1.節制地使用service 如果應用程式當中需要使用service來執行後台任務的話,請一定要注意只有當任務正在執行的時候才應該讓service執行起來。另外,當任務執行完之後去停止service的時候,要小心service停止失敗導致記憶體洩露的情況 2.當介面不可見時釋放記憶體 當使用者開啟另...
Android效能優化
本篇主要是對 google推出的效能優化典範 進行乙個通篇的整理 主要在於一些具體的優化技巧 至於60fps 掉幀 gc 記憶體抖動 閾值 等等這些效能術語的概念裡面不做多概括,請自行查閱 本篇從以下幾點延伸擴充套件 systrace systrace 在android ddms 裡自帶,可以用來跟...