-
shell命令查看全部
-
memory查看全部
-
內存優化的意義: 避免oom 可能存在流暢性,響應速度等方面的問題查看全部
-
避免內存泄漏查看全部
-
數據結構的優化處理查看全部
-
1.內存大戶:圖片查看全部
-
軟引用方法解決圖片與圖片的內存溢出查看全部
-
設置顯示圖片的中心位置查看全部
-
使用DDMS查看內存查看全部
-
查看內存大小的方法查看全部
-
OOM問題優化(下) 通過軟引用來優化圖片,使用單例模式 下次使用時先判斷此圖片是否還在,比如是否被回收了,或者第一次加載,就需要重新加載查看全部
-
OOM問題優化 1、OOM問題分析 2、強引用、軟引用的意義 3、優化OOM問題的方法 4、代碼演示 1、OOM問題分析 OOM的必然性與可解決性 OOM絕大多數發生在圖片 2、強引用、軟引用的意義 1) 如果強引用,必須主動去回收,否則容易出現OOM 若是軟引用,系統在不用時自動清理掉 private String strongref; private SoftReference<String> softref; strongref = String.valueOf(Math.radom()); //強引用 softref = new SoftReference(String.valueOf(Math.random())); //弱引用 變量的生命周期和其聲明的地方有關,全局和局部,全局的生命周期就是Activity的生命周期,局部就是方法 2)強引用與軟引用的使用場景 強引用只能在生命周期結束才能被回收,除非.recycle() 3、優化OOM問題的方法 1)注意臨時Bitmap對象的及時回收 2)避免Bitmap的浪費 3)Try catch某些大內存分配操作 4)加載Bitmap:縮放比例、解碼格式、局部加載、LRU加載方式 實例: 1)選擇圖片 2)抽樣加載 3)對每個像素的RGB換一下,原來一個像素4個字節,換成2個字節 4)顯示部分,可以手指移動 可以參考 之前的例子 http://www.xianlaiwan.cn/u/1147490/course/489/notes?page=1查看全部
-
筆記五 2、對象復用 1)復用系統自帶的資源 2)ListView/GridView的contentView復用 3) 避免在onDraw方法里面執行對象的創建 3、避免內存泄露 內存泄露:由于代碼瑕疵,導致這塊內存,雖然是停止不用了,但依然被其他東西引用著,使得GC沒法對它進行回收。 1)內存泄露會導致剩余可用Heap越來越少,頻繁出發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的內部類,會導致thread所在的activity無法被GC回收,因為thread實際上引用了activity的資源 優化 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對象是否及時關閉查看全部
-
筆記四 優化: 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內存優化方法 1、數據結構的優化 2、對象復用 3、避免內存泄露 4、相關演示 1、數據結構的優化 1)頻繁字符串拼接用StringBuilder 字符串通過+的方式進行字符串拼接,會產生中間字符串內存塊,這些都是沒有用的,而且低效,耗時較長 2)ArrayMap、SparseArray替換HashMap 3)內存抖動 變量使用不當引起的 突然的大量申請內存,然后沒多久又棄之不用,過了一段時間,又大量申請內存,像鋸齒一樣的內存使用效果 實例: 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]; //大量申請內存 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
提交
取消