我应该如何计算玩家花费在应用程序之外的时间?

问题描述:

在Android Studio中制作的游戏中,我想要一个随着时间的推移而被侵蚀的对象。一旦物体完全被侵蚀,玩家就可以将它击退。我希望这个时间值基于真实的世界时间,以便在应用程序关闭时该项目继续受到侵蚀。我应该如何计算玩家花费在应用程序之外的时间?

完成此操作的最佳方法是什么?我应该使用日期变量,还是我可以逃避一些简单的事情?

+0

使用**计时器k **带警报管理器如果需要 –

有一个非常简单的方法,您可以通过sharedprefrencesservice,当应用程序被杀害节省时间日期变量,当用户回到您的应用程序,你可以对你的保存密钥检查值,如果不使用null将它与当前时间进行比较,并获得两者之间的差异。这就是你如何得到这个。

+1

好的和可行的解决方案。 –

当对象开始侵蚀,节省时间:
long startTime = SystemClock.elapsedRealtime();

在你onPause(),保存此时间:

public void onPause() { 
    SharedPreferences.Editor editor = getSharedPreferences("myPrefs", MODE_PRIVATE).edit(); 
    editor.putLong("startTime", startTime); 
    editor.commit(); 
    super.onPause(); 
} 

在你onResume(),得到保存的时间和当前时间比较:

public void onResume() { 
    SharedPreferences prefs = getSharedPreferences("myPrefs", MODE_PRIVATE); 
    long startTime = prefs.getLong("startTime", 0); 
    long elapsedTime = SystemClock.elapsedRealtime() - startTime; 

    if (elapsedTime > EROTION_TIME) { 
     // Voila !! The object has eroded. 
    } 
} 
+0

我想这是一个真正的好选择,考虑到所提到的文档(https://developer.android.com/reference/android/os/SystemClock.html):SystemClock.elapsedRealtime()返回系统启动以来的时间[。 ..]这个时钟保证是单调的,因此是通用间隔时间的推荐基础。 –

+0

它确实不是。当设备重新启动时钟重置。从时代开始,你应该使用“常规”毫米 –