你怎么能避免Android游戏中的时钟漏洞?

时间:2011-10-07 11:54:53

标签: android

我需要测量一段时间可以持续几个小时。我假设正常的做法是这样的:

Date date = new Date();
...wait some time...
(new Date()).getTime() - date.getTime())

但用户是否可以将Android时钟改回一小时以欺骗游戏并缩短时间?从在线资源中获取阅读时间是最佳解决方案吗?

1 个答案:

答案 0 :(得分:11)

new Date()使用System.currentTimeMillis(),这取决于操作系统时钟 - 并且在用户更改系统日期和时间时可能会发生变化。

您应该使用System.nanoTime(),其中包含以下属性:

/**
 * Returns the current value of the most precise available system
 * timer, in nanoseconds.
 *
 * <p>This method can only be used to measure elapsed time and is
 * not related to any other notion of system or wall-clock time.
 * The value returned represents nanoseconds since some fixed but
 * arbitrary time (perhaps in the future, so values may be
 * negative).  This method provides nanosecond precision, but not
 * necessarily nanosecond accuracy. No guarantees are made about
 * how frequently values change. Differences in successive calls
 * that span greater than approximately 292 years (2<sup>63</sup>
 * nanoseconds) will not accurately compute elapsed time due to
 * numerical overflow.
 *
 * <p> For example, to measure how long some code takes to execute:
 * <pre>
 *   long startTime = System.nanoTime();
 *   // ... the code being measured ...
 *   long estimatedTime = System.nanoTime() - startTime;
 * </pre>
 * 
 * @return The current value of the system timer, in nanoseconds.
 * @since 1.5
 */
public static native long nanoTime();

仅通过更改系统日期无法操作。