-
shell命令查看全部
-
memory查看全部
-
內(nèi)存優(yōu)化的意義: 避免oom 可能存在流暢性,響應(yīng)速度等方面的問題查看全部
-
避免內(nèi)存泄漏查看全部
-
數(shù)據(jù)結(jié)構(gòu)的優(yōu)化處理查看全部
-
1.內(nèi)存大戶:圖片查看全部
-
軟引用方法解決圖片與圖片的內(nèi)存溢出查看全部
-
設(shè)置顯示圖片的中心位置查看全部
-
使用DDMS查看內(nèi)存查看全部
-
查看內(nèi)存大小的方法查看全部
-
OOM問題優(yōu)化(下) 通過軟引用來優(yōu)化圖片,使用單例模式 下次使用時先判斷此圖片是否還在,比如是否被回收了,或者第一次加載,就需要重新加載查看全部
-
OOM問題優(yōu)化 1、OOM問題分析 2、強引用、軟引用的意義 3、優(yōu)化OOM問題的方法 4、代碼演示 1、OOM問題分析 OOM的必然性與可解決性 OOM絕大多數(shù)發(fā)生在圖片 2、強引用、軟引用的意義 1) 如果強引用,必須主動去回收,否則容易出現(xiàn)OOM 若是軟引用,系統(tǒng)在不用時自動清理掉 private String strongref; private SoftReference<String> softref; strongref = String.valueOf(Math.radom()); //強引用 softref = new SoftReference(String.valueOf(Math.random())); //弱引用 變量的生命周期和其聲明的地方有關(guān),全局和局部,全局的生命周期就是Activity的生命周期,局部就是方法 2)強引用與軟引用的使用場景 強引用只能在生命周期結(jié)束才能被回收,除非.recycle() 3、優(yōu)化OOM問題的方法 1)注意臨時Bitmap對象的及時回收 2)避免Bitmap的浪費 3)Try catch某些大內(nèi)存分配操作 4)加載Bitmap:縮放比例、解碼格式、局部加載、LRU加載方式 實例: 1)選擇圖片 2)抽樣加載 3)對每個像素的RGB換一下,原來一個像素4個字節(jié),換成2個字節(jié) 4)顯示部分,可以手指移動 可以參考 之前的例子 http://idcbgp.cn/u/1147490/course/489/notes?page=1查看全部
-
筆記五 2、對象復用 1)復用系統(tǒng)自帶的資源 2)ListView/GridView的contentView復用 3) 避免在onDraw方法里面執(zhí)行對象的創(chuàng)建 3、避免內(nèi)存泄露 內(nèi)存泄露:由于代碼瑕疵,導致這塊內(nèi)存,雖然是停止不用了,但依然被其他東西引用著,使得GC沒法對它進行回收。 1)內(nèi)存泄露會導致剩余可用Heap越來越少,頻繁出發(fā)GC 實例: private class TestThread extends Thread{ @Override public void run(){ super.run(); while(true){ try{ Thread.sleep(1000*60*5); }catch(InterruptedException e){ e.printStackTrace(); } } } } 以上thread是mainActivity的內(nèi)部類,會導致thread所在的activity無法被GC回收,因為thread實際上引用了activity的資源 優(yōu)化 private class TestThread extends Thread{ @Override public void run(){ super.run(); try{ Thread.sleep(1000*60*5); }catch(InterruptedException e){ e.printStackTrace(); } } } 2)尤其Activity的泄露 3)用Application Context而不是Activity Context 4)注意Cursor對象是否及時關(guān)閉查看全部
-
筆記四 優(yōu)化: private void do Churn(){ Log.d("suncj", "doChurn start"); String[] strMatrix = new String[length]; //在外面定義 for(int i = 0; i < rowlenght; i ++){ for(int j = 0; j < length; j++){ strMatrix[j]= String.valueOf(ran.nextDouble()); } Log.d("suncj", "doChurn rowStr:"+i); } Log.d("suncj", "doChurn end"); } 4)再小的Class耗費0.5KB 5)HashMap一個entry需要額外占用的32B查看全部
-
筆記三 APP內(nèi)存優(yōu)化方法 1、數(shù)據(jù)結(jié)構(gòu)的優(yōu)化 2、對象復用 3、避免內(nèi)存泄露 4、相關(guān)演示 1、數(shù)據(jù)結(jié)構(gòu)的優(yōu)化 1)頻繁字符串拼接用StringBuilder 字符串通過+的方式進行字符串拼接,會產(chǎn)生中間字符串內(nèi)存塊,這些都是沒有用的,而且低效,耗時較長 2)ArrayMap、SparseArray替換HashMap 3)內(nèi)存抖動 變量使用不當引起的 突然的大量申請內(nèi)存,然后沒多久又棄之不用,過了一段時間,又大量申請內(nèi)存,像鋸齒一樣的內(nèi)存使用效果 實例: int rowlength = 10; //10 行 int length = 420000; private void do Churn(){ Log.d("suncj", "doChurn start"); for(int i = 0; i < rowlenght; i ++){ String[] strMatrix = new String[length]; //大量申請內(nèi)存 for(int j = 0; j < length; j++){ strMatrix[j]= String.valueOf(ran.nextDouble()); } Log.d("suncj", "doChurn rowStr:"+i); } Log.d("suncj", "doChurn end"); }查看全部
舉報
0/150
提交
取消