我知道這是使用位圖的常見問題,但我不知道如何繼續使用示例。特別是因爲圖像視圖的大小並不大,你會說它應該會導致內存錯誤。我認爲這是因爲我經常創建位圖,而不是一旦螞蟻每隔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);
}
}
創建右邊和屏幕的左側具有隨機長度的可繪製。
現在,我稱這種現象爲MainActivity
每5秒一個Handler
:
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);
}
首先,它的工作就像我想要的工作。但每次出現新的drawable時,我的遊戲都會滯後,並且經過5-6次創建一次後會崩潰
System.gc()
和bitmap.recycle
函數不能很好地工作。有人有解決方案嗎?
爲什麼在方法範圍內一次又一次地讀取和解碼?在構建對象並重用它時執行一次。 – duffymo
是啊這就是我想要做的。但我沒有得到如何。你有什麼樣的例子嗎? – Hendrx
在Runnable/Callable類構造函數中或在擁有onDraw的類中執行此操作。我更喜歡第二個。 – duffymo