2012-02-28 47 views
0

我正在嘗試爲android編寫一個簡單的應用程序。我試圖預先載入每個大小爲〜75KB和分辨率爲768x480的7 jpg圖像。在HTC Flyer上運行時,它運行良好。在HTC Evo 3D上運行時,它會崩潰。顯然我分配太多memeory:Android SDK - 預加載小圖像會讓我的應用程序超出內存

1658880-byte external allocation too large for this process. 
Out of memory: Heap Size=6663KB, Allocated=4297KB, Bitmap Size=25278KB, Limit=32768KB 
Trim info: Footprint=6663KB, Allowed Footprint=6663KB, Trimmed=452KB 
VM won't let us allocate 1658880 bytes 
Clamp target GC heap from 33.136MB to 32.000MB 

這似乎很奇怪。我應該創造更小的圖像?我認爲今天的高分辨率屏幕似乎不太可能。我想擴大堆大小?那麼只有Android 3.0才支持。什麼是適當的解決方案? Btw。我用預載圖片的代碼是:

stringsImages = new Drawable[]{ 
      getResources().getDrawable(R.drawable.strings0), 
      getResources().getDrawable(R.drawable.strings1), 
      getResources().getDrawable(R.drawable.strings2), 
      getResources().getDrawable(R.drawable.strings3), 
      getResources().getDrawable(R.drawable.strings4), 
      getResources().getDrawable(R.drawable.strings5), 
      getResources().getDrawable(R.drawable.strings6) 
    }; 

就一定要避免我也使用5MB〜還對音頻數據進行計算的計算可能出現的混亂。

+2

不敢我問你爲什麼要預載的圖片?爲什麼不能在需要時加載它們? – 2012-02-28 00:11:29

+0

Wellcome這些圖像經常互換,因爲它們反映的音頻屬性正在迅速變化。 – siemanko 2012-02-28 00:39:15

回答

1

如果內存不足,請嘗試對每個drawable進行二次採樣。這會減小圖像的大小以節省內存。瞭解如何工作,請參閱文檔here。我已經完成了這項工作並節省了內存,並且從未真正看到任何質量差異。嘗試在每個圖像上運行此代碼:

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 4; //the higher this number goes, the smaller the image gets 
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.strings0, options); 

然後你就可以在每個位設置爲ImageViewimageView.setImageBitmap(bitmap1);

相關問題