7

我正在 Android Samsung Galaxy TAB 10.1 上开发。官方更新到4.0.4版本后经常报错:

11-01 17:04:35.382: E/gralloc(11657): GetBufferLock timed out for thread 11657 buffer 0x55 usage 0x33 LockState 1

并且设备立即重新启动。如果我正在调试自己的应用程序,这个错误看起来完全是随机的。

有什么建议吗?

附言

我唯一的一个无限绘画循环:

public void run() {
    Canvas canvas = null;

    while (true) {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        try {
            synchronized (lock) {
                if (!invalidated)
                    continue;
            }

            canvas = mHolder.lockCanvas();

            synchronized (mHolder) {
                onDraw(canvas);
            }

            synchronized (lock) {
                invalidated = false;
            }
        } finally {
            if (canvas != null) {
                mHolder.unlockCanvasAndPost(canvas);
                canvas = null;
            }
        }

        synchronized (lock) {
            if (painter == null)
                break;
        }
    }
}
4

2 回答 2

1

我猜这个 GPU 内存有问题,当这个错误发生时你是否在做一些繁重的图形显示?

如果不是...也许另一个应用程序是。

值得检查具有大量 GPU 消耗的应用程序(可能是大量动态壁纸?)并将其删除。然后重新启动应该可以解决这个问题。

还要注意你永远不应该写:

while (true) {
}

至少添加一个运行标志:

while(running){
}

因此您可以在应用程序停止时将运行设置为 false。

于 2013-03-14T12:31:51.753 回答
0

看起来需要由其他线程访问的块被您的应用程序无限使用。您是否在您的绘画方法中运行无限循环?

于 2013-03-15T07:07:03.963 回答