按下主页按钮时暂停游戏线程,重新进入恢复游戏线程



我遇到了一个问题

点击主页按钮时,我的游戏线程类暂停。但是当重新进入应用程序并调用 onResume() 方法时,它应该恢复游戏线程......我得到的每一个薄都是一股力量接近。

这是我的主要活动:

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;
}
}

我删除了代码中不相关的部分。

重新进入应用程序时,android.view.Choreographer类打开。

有什么想法吗?

实际上,您并没有暂停线程(严格来说,没有暂停线程这样的事情)。你正在结束你的线程。

当你调用 pause() 时,你将 isRunning 标志设置为 false,这使得线程退出循环并且线程结束。当您再次将"isRunning"设置为 true 时,线程不会重新启动。

实际上你不能在java中重用线程,你必须创建一个新的线程,因为一旦线程循环结束,它就死了。

最新更新