use*_*526 11 java android android-canvas
尝试在单个画布上绘制每个ms的内容.我的意思是只向画布添加细节,而不是每一帧都重绘它.所以这段代码给了我三个不同的画布.第三,然后再次.为什么?
public void run() {
this.run = true;
Canvas canvas = null;
while (run) {
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (this.surfaceHolder) {
Thread.sleep(delay);
draw(new Img(canvas, size));
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (canvas != null) {
this.surfaceHolder.unlockCanvasAndPost(canvas);
}
}
synchronized (this) {
if (wait) {
try {
wait();
} catch (Exception e) {}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果它是android三重缓冲 - 如何关闭它,或用它做一些事情?Android 4.2.1
我建议不要在 Runnable 实现中将布尔字段命名为“run”(其中该方法返回 void)。即使问题没有从冲突中浮现出来,也会令人困惑。也许“运行”或其他东西(任何东西)会更有意义——更容易调试。
多线程时不要使用 Object.wait。它不会总是(通常不会)按照您的预期行事。
您很可能会获得 Canvas 成员的多个实例,因为某个地方(可能在 Android 框架中,或者可能在您的代码中......很难说),正在调用“new Canvas(args)”,而您认为是您的只有 Canvas 实例在另一个线程上。虽然您只有一个引用,但可以创建多个实例。
我不建议使用同步(无论如何),除非您确定需要这样做。
坚持住。这个问题非常令人困惑——我去年春天就解决了这个问题,这并不容易也不有趣。
希望以上任何内容都能以某种方式有所帮助。
-布兰登
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |