这就是我所做的:
@Override
public void surfaceCreated(SurfaceHolder arg0) {
if (thread.getState() == Thread.State.TERMINATED){
CreateThread(getHolder(),getContext());
}
thread.setRunning(true);
thread.start();
}
- 在 CreateThread 你应该有 thread = new MyThread(...);
- setRunning (boolean mRun) 使用布尔值来启动/停止运行功能(我想我是受到 LunarLander 的启发);
如果您想正确使用 onPause/onResume,请不要将线程使用的变量放入线程中(就像在 LunarLander 中所做的那样)。我建议你这样做:
// Variables declarations
public MyGameThread CreateThread(...){
thread = new MyGameThread(holder, context, new Handler() {
// and so on....
});
}
当您通过 onPause/onResume 时,您的线程将被销毁和更新,但如果您将变量放在它之外,您可以在之后继续使用它们。
如果您有重要的东西要保留,请使用以下选项之一:
- SharedPreferences:一个 xml 将被创建并保存在本地,其中的变量即使在应用程序结束后仍然存在;
- 如果您要管理超过 5-10 个变量,则使用 SQL 数据库,因为在这种情况下,使用前一个选项会很困难。