我正在开发一个处理工作线程上的画布绘图的小型 Android 游戏。游戏结束后,该线程应该开始下一个活动,但不知何故,UI 线程似乎因启动新功能而被阻塞。
这是我的游戏主循环:
while(true)
// Perform Ticks until the player makes a mistake
c = _surfaceHolder.lockCanvas();
if ((toDraw = rh.performTick()) == null) {
lose();
break;
}
_surfaceHolder.unlockCanvasAndPost(draw(toDraw,c));
}
该函数performTick()
处理游戏逻辑并null
在游戏结束时返回。 draw()
进行渲染。两个函数都工作得很好——问题是lose()
,它除了开始一个新的活动之外什么都不做:
protected void lose() {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(_context, MainMenu.class);
_context.startActivity(intent);
}
});
}
游戏结束时,新的 Activiy (MainMenu) 正常启动,但不会对任何触摸事件做出反应。没有 LogCat 输出,也没有发生异常。更糟糕的是,lose()
在主循环开始之前调用它时可以正常工作。
我已经为此工作了好几天了。我尝试直接从工作线程启动活动(不使用Handler
in lose()
)并在互联网上搜索了几个小时 - 没有任何帮助。似乎 UI 线程以某种方式被阻塞或陷入无限循环,我不知道如何解决这个问题。
一切都在 Nexus 4 设备上调试。
顺便说一句:MainMenu.onCreate()
以另一种方式启动时工作正常。
请帮忙,MA3o