私は非常に興味深い状況に遭遇しました。私は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...
}
あなたができないのは、http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize で再生できるのは、ビットマップリソースをできるだけ早く解放することだけですb1.recycle()とb1 = null – sherpya
私のソリューションはBitmap.createScaledBitmap(b1、width、height、true)でした。作品は完璧です。 ur入力のおかげで! –