Pausa el hilo de juego cuando se presiona el botón de inicio, reingresa la reanición del hilo del juego

StackOverflow https://stackoverflow.com//questions/22019904

  •  21-12-2019
  •  | 
  •  

Pregunta

Tengo un problema

Al golpear el botón de inicio, mi clase de hilo de juego se detiene.Pero al volver a ingresar la aplicación y el método ONRESUME () se llama, debe reanudar el hilo del juego ... todo lo que obtengo es una fuerza cercana.

Aquí está mi principal poder:

public class MainActivity extends Activity {

private RelativeLayout relativeLayout;
private GameView gameView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    gameView = new GameView(this, this);
    setContentView(R.layout.activity_main);
    relativeLayout = (RelativeLayout)findViewById(R.id.mainView);
    relativeLayout.addView(gameView);
}

@Override
protected void onPause() {
    super.onPause();
    gameView.pause();
}

@Override
protected void onResume() {
    super.onResume();
    if(gameView.getGameThread() != null) {
        if(gameView.getGameThread().isRunning == false) {
            gameView.resume();
        }
    }
}
}

GameView está siguiendo la clase, un Sureopreview que recibe GamethRead:

public class GameView extends SurfaceView{

private GameThread gameThread;

public GameView(Context context, Activity activity) {
    super(context);

    gameThread = new GameThread(this);
    holder = getHolder();
    holder.addCallback(new SurfaceHolder.Callback() {

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {

        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            gameThread.setRunning(true);
            gameThread.start();

        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {

        }
    });
}

public GameThread getGameThread() {
    return gameThread;
}


public void update() {

}


public void pause() {
    gameThread.pause();
}

public void resume() {
    gameThread.resumeThread();
}
}

Esta es la clase Gamethread:

public class GameThread extends Thread{

private GameView view;
public boolean isRunning = false;

public GameThread(GameView view) {
    this.view = view;
}

public void setRunning(boolean setRunning) {
    isRunning = setRunning;
}

public void stopThread() {
    isRunning = false;
}

public void run() {
    while(isRunning) {
        Canvas c = null;
        view.update();
        try {
            c = view.getHolder().lockCanvas();
            synchronized (view.getHolder()) {
                view.draw(c);
            }
        }finally {
            if(c != null) {
                view.getHolder().unlockCanvasAndPost(c);
            }
        }
    }
}

public void startThread() {
    isRunning = true;
}

public void pause() {
    isRunning = false;
}

public void resumeThread() {
    isRunning = true;
}
}

quité las partes irrelevantes del código.

Al volver a ingresar la aplicación la clase Android.Ver.chorographer se abre

¿Alguna idea?

¿Fue útil?

Solución

En realidad, no estás deteniendo tu hilo (para ser estricto, no hay tal cosa como una pausa un hilo).Estás terminando tu hilo.

Cuando llame a Pausa () configura el indicador de GeneracDicETACODDODE TO FALSE, que hace que el hilo salga del bucle y los extremos del hilo.Cuando configure su 'isunestning' nuevamente nuevamente, el hilo no se reiniciará.

En realidad, no puedes reutilizar hilos en Java, tienes que crear uno nuevo, porque una vez que termina el bucle de hilo, está muerto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top