这是我第一次创建Android游戏。游戏通过SurfaceView运行。从线程类别开始另一个活动
这是SurfaceView
public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
private GameThread game_thread;
public GameView(Context context, AttributeSet attrs)
{
super(context, attrs);
SurfaceHolder sh = getHolder();
sh.addCallback(this);
setFocusable(true);
game_thread = new GameThread(sh, context, new Handler());
}
public void surfaceCreated(SurfaceHolder holder)
{
game_thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder)
{
game_thread.stop();
}
}
运行游戏是这样的线程。
public class GameThread extends Thread
{
public GameThread(SurfaceHolder sh_arg, Context c, Handler h)
{
sh = sh_arg;
context = c;
}
@Overide
public void run()
{
super.run();
while(!dead)
{
// Update here
}
// Game Over. Start another activity from here to show player score.
}
}
到目前为止,我设法让它开始另一项活动的唯一方法就是在循环之后添加它。
context.startActivity(new Intent(context, GameOver.class));
活动确实开始并显示,但冻结并导致ANR。
我猜测,从一个线程开始一个活动并不是一个好主意,还有更好的替代方法。
如果活动冻结你应该张贴相关活动代码,而不是代码与其他随机类 – Blackbelt 2013-02-20 14:46:36
运行新的活动(我将通过意向做)之前,我会建议,阻止你的线程运行,因为这可能是导致页面崩溃的原因,因为它仍然试图运行线程,但无法找到它。 – 2013-02-20 14:51:38