我想測試一下繪製到Canvas的一些不同的方法,而不觸發垃圾收集。即使是最基本的例子也會導致頻繁的gcs。例如:不能避免在簡單循環中的GC
class Panel extends View {
private int mX = 0;
private Paint mPaint = new Paint();
public Panel(Context context) {
super(context);
mPaint.setColor(0xFFFF0000);
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawRect(mX, 0, mX+40, 40, mPaint);
mX++;
postInvalidate();
}
}
獲得帶有SurfaceView(登月艙實例)相同的結果。 GC每10秒鐘左右一次,在實時遊戲中相當震撼。我沒有在上面的繪製循環中進行任何分配,所以必須在畫布等類中分配一些東西(不幸的是)。
我用opengl測試成功了,沒有gcs,但我希望避免進入opengl。我對它很熟悉,但使用opengl繪製一些我想實現的效果會很困難。
感謝
嗨羅曼,我認爲這有助於。 LogCat仍然顯示GC調用,但是來自不同的PID比我的應用程序。我不認爲我們可以對其他流程的GC做任何事情,對吧? – user291701
@ user291701:「我不認爲我們可以對其他進程的GC進行任何操作,對嗎?」 - 正確,但他們應該對你的前臺進程的性能有輕微的影響。 – CommonsWare