在 Android 的世界里,有两个总被开发者搞混的"时间管理大师"——System.currentTimeMillis() 和 SystemClock.elapsedRealtime()。它们就像《信条》里的时间逆转者,一个会跟着现实时间倒流,另一个却像钢铁直男般永不回头。今天我们用三个小故事,揭开它们的真面目!
在 Android 的世界里,有两个总被开发者搞混的"时间管理大师"——System.currentTimeMillis()和SystemClock.elapsedRealtime()。它们就像《信条》里的时间逆转者,一个会跟着现实时间倒流,另一个却像钢铁直男般永不回头。今天我们用三个小故事,揭开它们的真面目!
场景一:游戏每日签到的时空穿越
故事背景:你在一款单机养成游戏里种了棵电子树,每天签到能领阳光值。突然有一天你发现只要把手机时间调快,就能提前收割明天的阳光!
```java// 记录上次签到时间(错误示范)long lastSignTime = SharedPrefs.getLong("last_sign", 0); // 判断是否过了一天(使用系统时间)if (System.currentTimeMillis() - lastSignTime > 86400000) { giveSunshine(); // 发放阳光值 SharedPrefs.save("last_sign", System.currentTimeMillis());} else { showDialog("今天已经签到过了!");}
代码解密:这种情况用currentTimeMillis()就像把门锁钥匙放在门垫下。当用户:1️⃣ 签到后立即把时间调到23:592️⃣ 等待2分钟后系统时间自动跳到次日3️⃣ 再次打开APP就能重复签到!
(开发者:我的服务器呢?!哦对这是单机游戏
