2012-07-19 101 views
7

我嘗試顯示攝像頭拍攝的圖像並將其顯示在應用程序中。當我把低分辨率圖像(比如100KB的大小),我與開關位圖顯示沒有問題,缺點當我帶他們在高分辨率(1.5MB),應用程序崩潰,異常增加分配給應用程序的內存

Error java.lang.OutOfMemoryError. 

它正好在我的智能手機上(三星Galaxy SII,SIII Galaxy)在所有貨架上。 現在我通過降低照片的質量和尺寸來手動解決問題,但鑑於攝像頭隨着分辨率的提高而演變,這個問題可能會更頻繁地出現。 是否沒有永久的解決方案來增加分配給我的Android應用程序的內存,而無需手動干預設備和代碼?

圖像存儲位圖格式

//image creation 
Uri domuri1 

ContentValues cv = new ContentValues(); 
cv.remove("101"); 
domuri1 = getContentResolver().insert(Media.EXTERNAL_CONTENT _URI, cv); 
File domthumb1 = new File(domuri1.toString(), fileName1); 

//increment photo apparate 
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, domuri1); 
startActivityForResult(intent, 100); 

//images save 
ContentResolver cr = getContentResolver(); 
bitmap1 = MediaStore.Images.Media.getBitmap(cr, domuri1); 
imageView.setImageBitmap(bitmap1); 

回答

13

一個正常的應用程序的默認內存值是16MB,並可以android:largeHeap="true"(這可能會增加內存高達64MB)在applicattion標籤內的manifiest文件中使用。您可以通過 ActivityManager.getMemoryClass()ActivityManager.getLargeMemoryClass()獲取分配給您的記憶值。

即使你要求largeHeap,android只會分配更多的內存,如果你的應用程序需要它。

+0

好理想,但如果我在我的androidManifest中添加這個在 eclipse tel me 錯誤:找不到包含'android'屬性'largeHeap'的資源標識符 – vetic 2012-07-19 09:48:08

+0

您定位的是哪個API版本? – aProgrammer 2012-07-23 09:26:58

+0

我已經用api 8測試過了,而且我用api 11和android 3.0測試了 – vetic 2012-07-24 12:18:02