新的版本上線了,第二天就看到了反饋回來的錯誤,比較多的一個錯誤是java.lang.OutOfMemoryError: bitmap size exceeds VM budget,對於這樣的菜鳥看這個問題去修改那是不可能滴,我就看著老大去怎麼修改的。記憶體溢出一般是因為太多的圖片引起的,他就在思考圖片載入和清理的問題,想到了pad版本都沒有出現過類似的問題,為什麼手機版就出現了呢。大概的看了一下pad版本的代碼,突然想到了頁面跳轉之後忘了對圖片的緩衝進行回收,在代碼中加上
[java]
@Override
public void onDestroy() {
super.onDestroy();
if(checkImage != null) {
checkImage.clearBitmap();
}
}
問題就得瞭解決,checkImage變數是用於處理圖片載入的問題。我們的用戶端對需要使用很多圖片,圖片在程式中的處理方式是第一步首先檢查記憶體中是否存在載入的圖片,第二步如果沒有就檢查本地(SD卡)中有沒有儲存的圖片,最後才是到伺服器端進行請求。系統本身會對記憶體進行相應的處理,但是因為圖片載入的比較多比較頻繁,如果不進行手動清理,也是容易出現記憶體溢出的問題的。
clearBitmap函數:
[java]
public void <span style="font-size:18px; ">clear</span>Bitmap() {
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) {
}
}
}
另外遇到的一個問題就是一些null 指標的錯誤Caused by: java.lang.NullPointerException,這個問題出現的頻率也是比較大的一個,但是這個問題又不是自己 能夠解決的,屬於偶發性錯誤,對於這樣的錯誤,我們要做的只是保證用戶端不崩潰就行了,所以找到錯誤對應的行,查看null 指標大概出現的位置,然後使用try catch捕獲就行了,不需要進行別的任何的處理就行了。因為這個錯誤不會影響到下單和查看用戶端的一些重要的資訊。
作者:walker02