postInvalidate()导致堆

时间:2013-05-27 06:03:00

标签: java android garbage-collection heap

我已经设置了一个系统来移动应用程序中的某些图像,但我的postInvalidate()调用似乎会导致很多堆空间。

private class update extends TimerTask {
    @Override
    public void run() {

        long timestamp = System.currentTimeMillis() - prevTime;
        prevTime = System.currentTimeMillis();
        speed += (speedIncrease / 5 * timestamp);
        location.y += (int) (speed / 5 * timestamp);
        if (location.y >= targetY) {
            location.y = targetY;
            falling = false;
            super.cancel();
        }
        screen.redraw();
    }
}

是我的代码,由timer.schedule每五毫秒调用一次。 screen.redraw()在视图中调用postInvalidate()

我得到的一段错误日志:

05-27 07:53:05.711: I/dalvikvm-heap(9805): Grow heap (frag case) to 8.875MB for 1536016-byte allocation
05-27 07:53:05.791: D/dalvikvm(9805): GC_CONCURRENT freed 12K, 21% free 8978K/11335K, paused 2ms+12ms
05-27 07:53:05.861: D/dalvikvm(9805): GC_FOR_ALLOC freed 1501K, 34% free 7490K/11335K, paused 19ms
05-27 07:53:05.861: I/dalvikvm-heap(9805): Grow heap (frag case) to 8.875MB for 1536016-byte allocation
05-27 07:53:05.941: D/dalvikvm(9805): GC_CONCURRENT freed 12K, 21% free 8978K/11335K, paused 2ms+2ms
05-27 07:53:06.011: D/dalvikvm(9805): GC_FOR_ALLOC freed 1501K, 34% free 7490K/11335K, paused 19ms
05-27 07:53:06.011: I/dalvikvm-heap(9805): Grow heap (frag case) to 8.875MB for 1536016-byte allocation
05-27 07:53:06.111: D/dalvikvm(9805): GC_CONCURRENT freed 12K, 21% free 8978K/11335K, paused 2ms+3ms
05-27 07:53:06.221: D/dalvikvm(9805): GC_FOR_ALLOC freed 1502K, 34% free 7490K/11335K, paused 19ms

我不确定我在这里错过了什么/做错了什么。有什么想法吗?

感谢。

编辑:

我已经发现了问题,我不小心在draw方法中加载了背景。我在这里显示的代码导致draw方法被调用,因此图像被反复加载。

0 个答案:

没有答案