Это мой первый раз, когда вы создаете игру для 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
я бы посоветовал перед запуском нового процесса (я хотел бы сделать это с помощью Intent), чтобы остановить работу вашего потока, поскольку это может быть причиной того, что страница Crash вызывает попытку запуска потока, но не может ее найти. –