android一種引發內存溢出的原因和一種對應的解決方式

       新的版本上線了,第二天就看到了反饋回來的錯誤,比較多的一個錯誤是java.lang.OutOfMemoryError: bitmap size exceeds VM budget,對於這樣的菜鳥看這個問題去修改那是不可能滴,我就看着老大去怎麼修改的。內存溢出一般是因爲太多的圖片引起的,他就在思考圖片加載和清理的問題,想到了pad版本都沒有出現過類似的問題,爲什麼手機版就出現了呢。大概的看了一下pad版本的代碼,突然想到了頁面跳轉之後忘了對圖片的緩存進行回收,在代碼中加上

	@Override
	public void onDestroy() {
		super.onDestroy();
		if(checkImage != null) {
			checkImage.clearBitmap();
		}
	}
       問題就得了解決,checkImage變量是用於處理圖片加載的問題。我們的客戶端對需要使用很多圖片,圖片在程序中的處理方式是第一步首先檢查內存中是否存在加載的圖片,第二步如果沒有就檢查本地(SD卡)中有沒有存儲的圖片,最後纔是到服務器端進行請求。系統本身會對內存進行相應的處理,但是因爲圖片加載的比較多比較頻繁,如果不進行手動清理,也是容易出現內存溢出的問題的。

clearBitmap函數:

	public void clearBitmap() {
		if(hm != null) {
			try {
				Iterator<Map.Entry<String, Bitmap>> it = hm.entrySet().iterator();
				while(it.hasNext()) {
					Map.Entry<String, Bitmap> entry = it.next();
					Bitmap bm = entry.getValue();
					bm.recycle();
					bm = null;
				}
				hm.clear();
			}catch (Exception e) {
			}
		}		
	}

       另外遇到的一個問題就是一些空指針的錯誤Caused by: java.lang.NullPointerException,這個問題出現的頻率也是比較大的一個,但是這個問題又不是自己 能夠解決的,屬於偶發性錯誤,對於這樣的錯誤,我們要做的只是保證客戶端不崩潰就行了,所以找到錯誤對應的行,查看空指針大概出現的位置,然後使用try catch捕獲就行了,不需要進行別的任何的處理就行了。因爲這個錯誤不會影響到下單和查看客戶端的一些重要的信息。




發佈了32 篇原創文章 · 獲贊 3 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章