我目前(尝试)编程一个小游戏。我有一个小设计/死锁问题。杀死僵局
当我按下一个按钮时,一个新的Intent打开并且surfaceDestroyed设置一个布尔值来设置睡眠线程。 当我返回线程获取通知信号。
这可以在大约90%的时间内完成(当我使用eclipse进行调试时,这是100%)。
我相信死锁发生在线程的运行功能(两个同步)。问题是,wait()需要一个同步的线程,而ondraw()需要对这个表面持有者进行锁定。
我已经玩过一段时间了,但所有其他组合都会让事情变得更糟,我不知道如何解决这个问题。所以,请帮助:)
的主题:
class BattleEarthThread extends Thread {
private SurfaceHolder _surfaceHolder;
private BattleEarthView _battleEarthView;
private boolean _run = false;
private boolean _suspended = false;
public SurfaceHolder getSurfaceHolder() {
return _surfaceHolder;
}
public BattleEarthThread(SurfaceHolder surfaceHolder, BattleEarthView panel) {
_surfaceHolder = surfaceHolder;
_battleEarthView = panel;
}
public void setRunning(boolean run) {
_run = run;
}
public void setSuspend(boolean suspend) {
_suspended = suspend;
}
public boolean getSuspended() {
return _run;
}
public boolean getRunning() {
return _run;
}
@Override
public void start() {
super.start();
_run = true;
}
@Override
public void run() {
Canvas c;
while (_run) {
c = null;
try {
synchronized(this)
{
c = _surfaceHolder.lockCanvas(null);
synchronized (_surfaceHolder) {
if(_suspended)
this.wait();
else {
_battleEarthView.onDraw(c);
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}
我们需要查看其他线程的代码才能完全理解这一点。 – Delyan