2012-12-17 28 views
0

我正在開發一個使用opencv庫(面部檢測樣本)的android圖像捕獲應用程序。我的目標是捕獲5個圖像並將其發送到我的web服務。捕捉圖像後,將位圖圖像轉換爲base64字符串並存儲到字符串[]中。最後,我將這個字符串[]發送到Web服務。這個應用程序在我的模擬器中工作。但是當我檢查我的Android平板電腦時,它會拋出「增長堆(碎片情況)爲7.827MB,爲1228816字節分配」異常並退出應用程序。在互聯網搜索後,我發現了一些關於此的鏈接。Android爲1228816字節的分配增長堆(碎片情況)爲7.827MB

鏈接1:Android grow heap frag case

鏈接2:how can I clear growing heap?

但他們沒有告訴我會做什麼。如果這個問題存在。看到一些鏈接後,我認爲這可能是因爲內存泄漏。但我不知道該怎麼做。由於我是Android新手,你能否給我一些關於這方面的建議會很棒。

我在以下鏈接中附加了我的日誌文件。 http://pastebin.com/82VxhBmz

+1

http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading- an-image-to-a-bitmap-object看到這個鏈接 – Zombie

+0

謝謝。我會查一下。我附上了我的日誌文件。 – Manoj

回答

1

您面臨的問題主要是因爲base64將圖像轉換爲字符串。
當尺寸較大的圖像時@例如當您從相機中單擊圖像時,它總是以MB爲單位,當轉換爲字符串時將使用更多內存。所以當你點擊很多圖片時,字符串的大小會增加你的內存大小,並且會迫使android銷燬你的應用程序,因爲Android應用程序在內存不足的情況下會使用更多的內存。

所以上傳多個圖像到服務器使用不同的方法爲例參考以下問題,我已經給出了答案如何用戶可以上傳圖像到服務器。
Android upload image from gallery to server

+0

感謝您的回答。我會嘗試你的建議並讓你知道結果。 – Manoj

+0

當然,如果我的回答幫助了你,請接受它,以便將來也能幫助別人。 –

+0

該示例說從Gallery上傳文件並使用HTTP Post。但是我沒有將文件存儲在圖庫中,並且我想將圖像發送到已經存在的soap web服務(服務器端java),並且我的圖像大小小於1MB((即)22 kb),我只用了5個圖片。那麼可能是什麼問題? – Manoj

1

在相機中使用的情況下,髖關節增長很可能是由於預覽照相機大小。命中(實施SurfaceHolder.Callback時),可能會幫助您解決問題:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 




    Camera.Parameters parameters = camera.getParameters(); 
    //get all supported sizes for the camera 
    List<Camera.Size> sizes = parameters.getSupportedPreviewSizes(); 
    //make sure you select the smallest size (resolution), which is first in the list 
    Camera.Size selected = sizes.get(0); 
    //add the selected size 
    parameters.setPreviewSize(selected.width, selected.height); 
    //set the parameters 
    camera.setParameters(parameters); 
    camera.startPreview(); 

}`