Android SurfaceView当前线程参考

时间:2016-06-28 20:44:16

标签: java android multithreading

我正在关注游戏开发的这个教程,我遇到了一些让我感到困惑的事情。

因此,在本教程中,创建了一个扩展SurfaceView实现Runnable的类,用于管理主游戏内容视图。表面视图设置为主要活动的内容视图,如下所示:

public class MainActivity extends Activity {

    private GameView gameView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        gameView = new GameView(this);
        setContentView(gameView);
    }

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

    @Override
    protected void onResume() {
        super.onResume();
        gameView.resume();
    }
}

SurfaceView类定义如下:

public class GameView extends SurfaceView implements Runnable {
    Thread gameThread = null;
    private boolean playing;

    public TDView(Context context) {
        super(context);

       // other game logic
    }

    public void pause() {
        playing = false;
        try {
            gameThread.join();
        } catch (InterruptedException e) {
        }
    }

    public void resume() {
        playing = true;
        gameThread = new Thread(this);
        gameThread.start();
    }

    @Override
    public void run() {
        while (playing) {
            update();
            draw();
            control();
        }
    }
}

不要误解我的意思 - 代码完美无缺,但我很困惑 gameThread变量在哪里实例化?我的项目中没有任何代码行指示它,除了简历方法。 是否在创建GameView实例时调用了resume方法,还是我还缺少其他东西?

打扰一下,如果这是一个愚蠢的问题,但我甚至无法弄清楚如何谷歌这个。

1 个答案:

答案 0 :(得分:1)

如果未恢复活动,则不会调用

pause()。所以这种方法很好。每次pause()被称为gameThread都不为空。