我正在开发Android三星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
Run Code Online (Sandbox Code Playgroud)
并立即重启设备.如果我正在调试自己的应用程序,则此错误显示为完全随机.
有什么建议吗?
PS
我唯一一个无限的画面循环:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我猜 GPU 内存出了问题,当这个错误发生时,你是否正在做一些繁重的图形显示?
如果不是……也许另一个应用程序是。
值得检查一下 GPU 消耗较大的应用程序(可能是一个沉重的动态壁纸?)并将其删除。那么重新启动应该可以解决这个问题。
还要注意的是,你永远不应该写:
while (true) {
}
Run Code Online (Sandbox Code Playgroud)
至少添加一个运行标志:
while(running){
}
Run Code Online (Sandbox Code Playgroud)
因此您可以在应用程序停止时将运行设置为 false。
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |