ビットマップを扱うのが一般的な問題だとわかっていますが、これを例を用いてどうやって進めるのか分かりません。特に画像ビューのサイズが大きくないので、メモリエラーが発生するはずです。ビットマップを作成するのではなく、5秒ごとに表示するのではなく、どのようにすればよいか分からないからです。まず、ビットマップを作成するためのコード。OutOfMemoryエラーが必要な解決策
JavaクラスtrapViews
:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = 20;
Random r = new Random();
int i1 = r.nextInt(900 - 200) + 200;
rnd = new Random();
//Linke Seite
System.gc();
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.stachelnstart);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(image, i1, 300, true);
float left = (float) 0;
float top = (float) (getHeight() - resizedBitmap.getHeight());
canvas.drawBitmap(resizedBitmap, left, top, paint);
//rechte Seite
Bitmap images = BitmapFactory.decodeResource(getResources(), R.drawable.stachelnstart1);
Bitmap resizedBitmaps = Bitmap.createScaledBitmap(images, getWidth()-resizedBitmap.getWidth()-OwlHole, 300, true);
float left1 = (float) (getWidth() - resizedBitmaps.getWidth());
float top1 = (float) (getHeight() - resizedBitmaps.getHeight());
canvas.drawBitmap(resizedBitmaps, left1, top1, paint);
}
}
は、ランダムな長さで画面の右側と左側に描画可能を作成します。
今、私はHandler
とMainActivity
に5秒ごとにこれを呼び出す:私はそれが仕事をしたいよう
final Handler h = new Handler();
Runnable r = new Runnable() {
public void run() {
System.gc();
traps();
h.postDelayed(this,5000); // Handler neustarten
}
}
private void traps() {
container = (ViewGroup) findViewById(R.id.container);
trapViews tv = new trapViews(this);
container.addView(tv,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
//tV.setImageCount(8);
h.postDelayed(r, 5000);
}
まず、それが働いています。しかし、新しい引出しが出現するたびに私のゲームは遅れており、5-6回後にはそれが落ちていく。
System.gc()
とbitmap.recycle
の機能はうまくいっていない。誰かが解決策を持っていますか?
なぜメソッドスコープで何度も読んだりデコードしたりするのはなぜですか?オブジェクトを構築して再利用するときは、一度行います。 – duffymo
私は何をしたいのかね。しかし、私は方法を取得しないでください。例はありますか? – Hendrx
Runnable/Callableクラスのコンストラクタで行うか、onDrawを所有するクラスで行います。私は2番目を好むだろう。 – duffymo