Я хотел бы вставить счетчик времени в игру.Если время равно 0, будет AlertDialog, который сообщает пользователю, что время истекло, и возвращается к предыдущему действию.Вот метод (он находится внутри класса, который расширяет SurfaceView):
public void showTime(){
time--;
Log.i("GameView time", "" + time);
if (time <= 0){
Log.i("gameview time","time out");
gameTimer.setRunning(false);
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this.getContext());
AlertDialog alert = alt_bld.create();
alert.setTitle("Time is out. You lose.");
alert.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
main.onBackPressed();
}});
alert.show();
}
}
Класс GameTimer представляет собой поток:
public class GameTimer extends Thread{
private GameView gameView;
private boolean run;
public GameTimer(GameView gameView){
this.gameView = gameView;
}
public void setRunning(boolean value){
this.run = value;
}
public void run(){
Looper.prepare();
while (run){
try {
gameView.showTime();
sleep(1000);
} catch (Exception e){
e.printStackTrace();
}
}
Looper.loop();
}
}
AlertDialogпоявляется, но приложение вылетает с сообщением: только исходный поток, создавший иерархию представлений, может касаться представлений.Но это нить, которая создала ... Где проблема?