Android優化雜談

內存   java

1. 申請內存須要控制大小,尤爲是高分辨率bitmap和大 圖resources android

緩存要有嚴格的上限控制。 數據庫

確實須要額外內存,native申請,繞過虛擬機 緩存

2. 將activity做爲context,被靜態類靜態引用後沒法釋放 多線程

3. 線程未退出,對相關對象的引用不能釋放 函數

4. 學會用mat看java的內存泄漏,mat也能夠用來查詢 native(C,C++)的內存泄漏問題   post

界面   動畫

1. 儘可能減小view層級,使用merge減小view層次 <merge xmlns:android="http://schemas.android.com/apk/res/ spa

android">
<ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="center" android:src="@drawable/golden_gate" /> </merge> 線程

2. ViewStub,暫時不用的view,能夠用viewstub佔位,方便且高效

3. view以及各png的id最好惟一,之前android有bug,循 環溢出,容易解析失敗

人眼很挑剔,想要流暢必須50fps,4ms畫界面,16ms處理任務

4. ondraw函數千萬別作耗時函數,例如在ondraw裏給textview setbackground,ondraw函數裏也不準有業務邏輯,我見過用ondraw 來計算位置,和動畫時間的


5. 切記:主線程不能執行長時間操做,要放到一個非主線程處理,

同時也防止anr,寫代碼時必定要注意上下文

6.單核手機上,即便非主線程處理,也要謹慎看是否能避開cpu的高 峯,不然界面同樣卡,多核手機上cpu佔用上60%也會卡  


7. listveiw,adapter getview必定要用

viewholder,基本概念請掌握

8. 刷新界面必須在主線程,或者 postinvalidate,opengl必須在render線 程,不然會報錯或者各類詭異問題

9.inflate是個耗時操做,儘可能避免, relativelayout比linearlayout快  

其餘:

1. 線程同步:Synchronized用法不當

致使ANR,wait方法使用不當致使ANR

2. 數據庫db操做,不能多線程寫 3. 數據庫db操做,transaction的使用

4.有Exception拋出時,catch 後必定要有 log輸出,不然後續有異常很難查找, outofmemory的父類不是Exception,因此 抓Exception是涵蓋不了OOM的  

相關文章
相關標籤/搜索