我有一个Android的益智游戏。当谜题开始时,我采取当前时间:
long startTime = System.currentTimeInMillis()
当玩家完成拼图时,我会再次抽出时间,减去开始时间并计算出已用时间。一切都好。
我的问题是应用程序中断时该怎么办。例如通过电话。此刻,拼图会自动保留在之前的状态(就像在视图中一样)。但是,计算completionTime = currentTime - startTime
现在无效。
我尝试使用onSaveInstaceState(Bundle)
保存已用时间。但是,重新进入应用程序时不会调用其对应的onRestoreInstanceState(Bundle)
。相反,调用onResume()
方法?我读过这是因为应用程序没有被“杀死”,而是仍然在内存中。在'杀'的情况下,我会想到View的状态也会丢失?在这种情况下我不认为跟踪视图是非常必要的,所以我也不会担心时间。
有没有办法从onResume()读取一个包,我应该只实现共享首选项吗?
我想避免更新游戏循环中的已用时间,因为这似乎效率低下。
答案 0 :(得分:9)
我建议不要使用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);
如果逻辑有缺陷,请注释(:
注意:有一种方法只能使用一个字段。但我们会保留这一点供读者发现。
答案 1 :(得分:2)
共享偏好对我来说似乎更好。
计算onPause()中的时差,当游戏进入后台时,假设用户已在玩游戏。将此差异添加到共享首选项中的上一次,然后再次存储。
在onResume()上再次启动时钟,并在必要时重复步骤1.
我希望你明白这一点。