ゲームスレッドを一時停止するホームボタンを押すと、再入力ゲームスレッド
-
21-12-2019 - |
質問
私は問題を抱えています
ホームボタンを押すと、私のゲームスレッドクラスが一時停止します。しかし、アプリを再入力してonResume()メソッドが呼び出されると、ゲームスレッドが再開されるはずです...私が得るevery thineは閉じます。
これは私の主な活動性です:
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の後のクラス、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();
}
}
.
これは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;
}
}
.
コードの無関係な部分を取り除いた。
Appを再入力するときはAndroid.View.Choreographerクラスを開く
任意のアイデア?
解決
実際には、あなたのスレッドを一時停止していません(厳格になるように、スレッドを一時停止するのと同じようなものはありません)。あなたはあなたのスレッドを終了しています。
pause()を呼び出すと、isRunning
フラグをfalseに設定します。スレッドはループを終了し、スレッドが終了します。「iSrunning」をもう一度TRUEに設定すると、スレッドは再起動しません。
実際には、スレッドをJavaで再利用することはできません。スレッドループが終了すると、それは死んでいます。
所属していません StackOverflow