效能優化 要點

2021-08-16 11:15:35 字數 2186 閱讀 2465

ui不可見時,及時釋放資源

頁面布局,盡量避免太多層級,避免被vm**。

頁面背景圖

view快取

使用renderscript、opengl來進行複雜的繪圖操作

使用su***ceview來替代view進行大量、頻繁的繪圖操作

自定義view中避免在ondraw方法裡面執行複雜的操作,避免建立物件。

ui執行緒只做介面重新整理,不做任何耗時操作

使用多程序拆分時請注意,乙個空程序也要額外佔1.4mb,需評估拆分是否划算?

執行緒不再需要繼續執行的時候要記得及時關閉

開啟執行緒數量不易過多,一般和自己機器核心數一樣最好,推薦開啟執行緒的時候,使用執行緒池。

braodcastreceiver,contentobserver,fileobserver,service的解綁和釋放

activity引用weakreference

context使用注意生命週期,避免記憶體洩漏

盡量不要在靜態變數或者靜態內部類中使用非靜態外部成員變數(包括context),即使要使用,也要考慮適時把外部成員變數置空(如上例可以通過把sbackground的callback置空來解決記憶體洩露的問題);

也可以在內部類中使用弱引用來引用外部類的變數

做到在ondestroy中釋放資源,如清空對等資源有直接引用或者間接引用的陣列(使用array.clear();array = null)

handler使用完畢及時清理:activity的ondestroy方法中呼叫handler.removecallbacksandmessages(null);取消所有的訊息的處理,包括待處理的訊息

cursor及時關閉:當查詢完畢後,及時關閉,這樣就可以把查詢的結果集及時給**掉。

i/o流操作完畢,讀寫結束,記得關閉。

如不需要訪問物件,請盡量用static method

常量請使用static final來修飾

static的合理使用:避免頻繁的使用static關鍵字修飾

對於那些無法避免需要建立物件的情況,可以考慮物件池模型。

使用android自帶的容器,取代hashmap等.比如sparsearray,pair等,它們都具有更好的效能(don』t use hashmap since it』s memory inefficient. putting a single entry into a hashmap requires 32 bytes.)

如無必要,service不要一直在跑

如果應用程式當中需要使用service來執行後台任務的話,請一定要注意只有當任務正在執行的時候才應該讓service執行起來。

另外,當任務執行完之後去停止service的時候,要小心service停止失敗導致記憶體洩漏的情況。

當我們啟動乙個service時,系統會傾向於將這個service所依賴的程序進行保留,這樣就會導致這個程序變得非常消耗記憶體。

並且,系統可以在lru cache當中快取的程序數量也會減少,導致切換應用程式的時候耗費更多效能。

嚴重的話,甚至有可能會導致崩潰,因為系統在記憶體非常吃緊的時候可能已無法維護所有正在執行的service所依賴的程序了。

為了能夠控制service的生命週期,android官方推薦的最佳解決方案就是使用intentservice,這種service的最大特點就是當後台任務執行結束後會自動停止,從而極大程度上避免了service記憶體洩漏的可能性。

關於intentservice更加詳細的用法講解,可以參考《第一行**——android》的9.5.2節。

讓乙個service在後台一直保持執行,即使它並不執行任何工作,這是編寫android程式時最糟糕的做法之一。

所以android官方極度建議開發人員們不要過於貪婪,讓service在後台一直執行,這不僅可能會導致手機和程式的效能非常低下,而且被使用者發現了之後也有可能直接導致我們的軟體被解除安裝。

如無必要,不要使用startforeground() 來啟動 service

採用記憶體快取和磁碟快取

android:largeheap標記在 android系統應用中也有廣泛的應用 ,比如 launcher, browser這些記憶體大戶上均有使用

使用優化後的lib和硬體加速。使用外部lib時注意,確保使用的是為移動環境優化後的lib

做好資料快取

優化邏輯處理

避免試用遞迴,它非常的耗費memory

優化演算法

更多效能優化相關:效能優化目錄

Hibernate效能優化要點

1.盡量使用many to one,避免使用單項one to many 2.靈活使用單向one to many 3.不用一對一,使用多對一代替一對一 4.配置物件快取,不使用集合快取 5.一對多使用bag 多對一使用set 6.繼承使用顯示多型 hql from object polymorphis...

Hibernate效能優化要點

robbin總結的hibernate效能優化要點 1.盡量使用many to one,避免使用單項one to many 2.靈活使用單向one to many 3.不用一對一,使用多對一代替一對一 4.配置物件快取,不使用集合快取 5.一對多使用bag 多對一使用set 6.繼承使用顯示多型 hq...

Hibernate效能優化要點

robbin總結的hibernate效能優化要點 1.盡量使用many to one,避免使用單項one to many 2.靈活使用單向one to many 3.不用一對一,使用多對一代替一對一 4.配置物件快取,不使用集合快取 5.一對多使用bag 多對一使用set 6.繼承使用顯示多型 hq...