我有一款安卓益智游戏。当拼图开始时,我取当前时间:
long startTime = System.currentTimeInMillis()
当玩家完成拼图后,我再次计算时间,减去开始时间并计算出耗时。这一切都很好。
我的问题是当应用程序中断时该怎么办。例如通过电话。目前,拼图会自动保持之前的状态(就像在 View 中一样)。但是,计算 completionTime = currentTime - startTime
现在将无效。
我已经尝试使用 onSaveInstaceState(Bundle)
保存耗时。然而,当重新进入应用程序时,它的对应物 onRestoreInstanceState(Bundle)
不会被调用。而是调用 onResume()
方法?我读到这是因为该应用程序尚未被“杀死”,而是仍在内存中。在“杀死”的情况下,我想 View 的状态也会丢失?我不认为在这种情况下跟踪 View 是非常必要的,所以我也不会担心时间。
有没有办法从 onResume() 中读取一个包,我应该只实现一个共享首选项吗?
我想避免在游戏循环中更新耗时,因为这看起来效率不高。
最佳答案
我建议根本不要使用 SharedPreference。
您只需要 2 个字段:startTime
和 elapsedTime
播放器启动时,将elapsedTime
初始化为0
和startTime
到 System.currentTimeMillis()
当 onPause()
被调用时,初始化 elapsedTime
使用
elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime);
当调用onResume()
时,将startTime
初始化为System.currentTimeMillis()
强>
当播放器完成后,时间是
elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime);
如果逻辑有问题请评论(:
注意:有一种方法可以只使用一个字段。!但我们会保留它以供读者发现。
关于安卓游戏 - 记录时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153744/