2012-08-14 2 views
5

私はAndroidにはかなり新しく、ゲームを開発しています。私が作成するビットマップは最大200kbのサイズなので、驚くべきことに、私は驚くべきことに、memory exceptionsからユーザーに報告しています。新しいspriteを作成するたびにBitmapFactory.decodeResource()に電話します。私のアプリケーションはゾンビ防衛ゲームなので、スプライトを頻繁に作成することが期待できます。Android:Out of Memory Exception/decodeResourceはVM予算にどのように追加されますか?

私はスプライトを作成するたびに、ビットマップを生成するためにデコードリソースを呼び出します。私の質問は、各アクティビティの開始時にデコードリソースを呼び出すだけで、パッケージレベルのビットマップを参照すると、VM予算に置かれるメモリの量は少なくなりますか?

答えて

18
  • あなたはPNGなどの画像リソースからビットマップをデコードすると、それ はKB単位でのサイズではなく、その後の画像の大きさについての詳細を依存しています。
  • 実際の出力に影響を与えずに元の画像のサイズを縮小できるかどうか試してみてください。
  • ビットマップを再利用しないでください。
  • BitmapFactory.Options()オブジェクトでさらに多くのオプションを調べることができます。たとえば、inSampleSizeを大きくすると、画像に必要なメモリ量を減らすことができます。 例えば
     
    BitmapFactory.Options o=new BitmapFactory.Options(); 
    o.inSampleSize = 4; 
    o.inDither=false;      //Disable Dithering mode 
    o.inPurgeable=true;     //Tell to gc that whether it needs free memory, the Bitmap can be cleared 
    myBitMap=BitmapFactory.decodeResource(getResources(),ID, o); 
    
  • 一つの有用なトリッキーな解決策は他の最適化が本当にあなたのために機能していない場合は、OutOfMemoryException例外をキャッチすることができ、その後、最大の品質を低下させることができ、ということです。..つまり16にinSampleSizeを設定することが減少しますあなたのイメージの品質は少なくともクラッシュからあなたのアプリケーションを保存する、私はビットマップで巨大なMPイメージをロードする必要が私のアプリケーションのいずれかでこれをやった。
+1

public static Bitmap loadBitmapSafety(int resDrId, Context context){ return loadBitmapSafety(resDrId, 1, context); } private static Bitmap loadBitmapSafety(int resDrId, int sampleSize, Context context){ BitmapFactory.Options ops = new BitmapFactory.Options(); ops.inSampleSize = sampleSize; try { return BitmapFactory.decodeResource(context.getResources(), resDrId, ops); } catch (OutOfMemoryError e) { if (sampleSize == 4) return null; return loadBitmapSafety(resDrId, sampleSize +1, context); } catch (Exception e){ return null; } } 
:注:' decodeResource(リソース、INT、android.graphics.BitmapFactory.Options) 'または' decodeFile(文字列、android.graphics.BitmapFactoryと共に使用される場合、このフラグは無視されます。オプション) '。 –

0

リソースの安全性からイメージを取得するためのスニペット。画質のしきい値として独自のsampleSizeを設定することができます(大きい画像の場合はsampleSize)。 inPurgeable` `のドキュメントから

関連する問題