Swift/Xcode中计算APP关闭至再次启动的秒数方法问询
两种时间差计算的高效实现方案
一、计算APP上次关闭到本次启动的时间差
不用折腾复杂服务,靠本地持久化存储就能轻松搞定,而且完全不影响现有代码,效率还拉满:
- 第一步:记录关闭时间:在APP退出的生命周期回调里(比如Android的
onDestroy、iOS的applicationWillTerminate),获取当前时间戳(毫秒/秒都行,统一单位就好),把它存在本地存储中(Android用SharedPreferences,iOS用UserDefaults),键名可以叫lastAppCloseTimestamp。
示例代码(Android Kotlin):// 在Activity的onDestroy或者Application的onTerminate中 val prefs = getSharedPreferences("AppTimeStorage", MODE_PRIVATE) prefs.edit().putLong("lastAppCloseTimestamp", System.currentTimeMillis()).apply() - 第二步:启动时算差值:在APP启动入口(比如
Application.onCreate或主Activity的onCreate),先读取之前存的关闭时间戳,再拿当前启动的时间戳做减法,转成秒数就是你要的结果。
示例代码:val prefs = getSharedPreferences("AppTimeStorage", MODE_PRIVATE) val lastCloseTime = prefs.getLong("lastAppCloseTimestamp", 0) val currentLaunchTime = System.currentTimeMillis() if (lastCloseTime != 0) { val secondsDiff = (currentLaunchTime - lastCloseTime) / 1000 // 这里就是上次关闭到本次启动的秒数差 } - 关于你提到的
timeserving(应该是指定时服务?),完全没必要用这种方案。上面的操作只在启停时各做一次读写和简单计算,都是轻量到可以忽略的操作,比定时服务高效太多,还不会占用额外资源。
二、倒计时结束前10分钟提醒用户点击按钮
核心是存倒计时的结束时间戳,而非剩余时间(APP关闭后剩余时间会失效),每次启动/回到前台时计算时间差即可:
- 第一步:初始化时存结束时间:当用户开启倒计时时,算出倒计时的结束时间戳(当前时间 + 倒计时总时长),把这个时间戳存在本地存储里,比如键名
countdownEndTimestamp。
示例:val totalCountdownMillis = 2 * 60 * 60 * 1000 // 假设倒计时2小时 val endTimestamp = System.currentTimeMillis() + totalCountdownMillis prefs.edit().putLong("countdownEndTimestamp", endTimestamp).apply() - 第二步:判断是否进入最后10分钟:在APP启动、回到前台,或者倒计时页面加载时,读取
countdownEndTimestamp,计算当前时间到结束时间的剩余时长:val endTimestamp = prefs.getLong("countdownEndTimestamp", 0) val currentTime = System.currentTimeMillis() if (endTimestamp > currentTime) { val remainingMillis = endTimestamp - currentTime val remainingMinutes = remainingMillis / (1000 * 60) if (remainingMinutes <= 10 && remainingMinutes > 0) { // 触发提醒,引导用户点击按钮 Toast.makeText(this, "倒计时只剩10分钟啦,请尽快点击按钮!", Toast.LENGTH_LONG).show() } } else { // 倒计时已结束,做相应收尾处理 } - 如果需要前台实时监测,用轻量的
Handler或者协程每隔1分钟检查一次就行,不用高频轮询,既满足需求又不费资源。
内容的提问来源于stack exchange,提问作者Damian Talaga
相关产品推荐
相关产品推荐

