這是我第一次創建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