2012-02-27 17 views
0

私は非常に興味深い状況に遭遇しました。私は2つのデバイスにアクセスすることができ、そのうちの1つはその中の最も魅力的なアンドロイド(ギャラクシーノート)の1つで、もう1つはまともなHTC Inspireです。この2つのデバイスの違いのおかげで、Galaxy Noteがアプリケーションをうまくロードすることに気づくことができましたが、Inspireはoutofmemoryexceptionを返します。スタックトレースは、それが私のコードのビットマップであることを示唆しています。私は非常に高い解像度(1280 x 800のような)である5つのビットマップを持っています。そして、私はそれぞれをsurfaceviewのコンストラクタで初期化します。私はそれが愚かな考えであることを知っていますが、私のノートは負荷を処理することができます。しかし、クレイパーデバイスは、そのビットマップデータをすべて処理することはできません。私はどのように私の問題を解決するのですか?私は解像度を下げることができますが、それは最後の手段です。ここに私のコードに似ています:Android SurfaceView BitmapFactoryメモリ不足の例外

static public class GraphicsView extends SurfaceView implements Runnable { 

    Thread t; 
    SurfaceHolder holder; 
    boolean sentinel = false; 
    Bitmap b1, b2, b3, b4, b5; 

    public GraphicsView(Context context) { 
     super(context); 
     holder = getHolder(); 
     b1 = BitmapFactory.decodeResource(getResources(), R.drawable.i); 
     b2 = BitmapFactory.decodeResource(getResources(), R.drawable.like); 
     b3 = BitmapFactory.decodeResource(getResources(), R.drawable.csharp); 
     b4 = BitmapFactory.decodeResource(getResources(), R.drawable.python_and); 
     b5 = BitmapFactory.decodeResource(getResources(), R.drawable.java); 
     /** 
     * 
     * This is where the exceptions come! 
     * 
     **/ 
    }  

    public void run() { 
     while (sentinel) { 
      if(!holder.getSurface().isValid()) { 
       continue; 
      } 
      try { 
       Canvas canvas = holder.lockCanvas(); 
       //Drawing commands go here...ommited. These commands may use any of the 5 bitmaps     
       holder.unlockCanvasAndPost(canvas); 
      }catch(Exception e) { 
       //Excpetion handling...its not getting here anyways 
      } 
     } 
    } 
    //More code below...Ommited... 
} 
+1

あなたができないのは、http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize で再生できるのは、ビットマップリソースをできるだけ早く解放することだけですb1.recycle()とb1 = null – sherpya

+0

私のソリューションはBitmap.createScaledBitmap(b1、width、height、true)でした。作品は完璧です。 ur入力のおかげで! –

答えて

1

私のソリューションはBitmap.createScaledBitmap(b1、width、height、true)でした。