You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio 实现答题后次日同时间解锁Activity 定时任务咨询

答题锁定功能实现思路

这个需求核心是时间差校验,不需要依赖复杂的定时调度任务主动修改状态,根据你的业务风控要求可以选择以下两种实现方案:

方案1:客户端本地实现(低风控场景适用)

适合仅需前端做权限控制、没有强防作弊要求的场景,实现成本极低:

  • 用户完成答题后,将created_at对应的时间戳持久化到本地存储(Android用SharedPreferences、iOS用UserDefaults、小程序用storage API)
  • 每次用户触发进入答题Activity的操作时,先做本地校验:
    • 无上次答题时间记录直接放行
    • 有记录的情况下,计算当前时间和上次答题时间的差值,差值≥86400秒(24小时)则允许进入,否则弹出锁定提示
  • 优化点:如果要避免用户修改本地时间绕过校验,可以在APP启动时同步一次服务端时间,用服务端返回的时间做差值计算

Android端代码示例:

// 答题完成后存储时间
val sp = getSharedPreferences("answer_config", Context.MODE_PRIVATE)
sp.edit().putLong("last_answer_ts", System.currentTimeMillis() / 1000).apply()

// 进入答题页前校验逻辑
val lastAnswerTs = sp.getLong("last_answer_ts", 0)
// 有服务端同步时间就替换下面的当前时间取值
val currentTs = System.currentTimeMillis() / 1000
if (currentTs - lastAnswerTs >= 24 * 3600) {
    // 放行进入答题页面
    startActivity(Intent(this, AnswerActivity::class.java))
} else {
    Toast.makeText(this, "答题功能次日同一时间解锁", Toast.LENGTH_SHORT).show()
}

方案2:服务端实现(高风控场景适用)

适合需要防作弊、数据一致性要求高的场景,完全避免客户端篡改问题:

  • 用户完成答题后,将created_at字段写入对应用户的数据库答题记录
  • 客户端每次尝试进入答题页前,先调用服务端的权限校验接口
  • 服务端取出该用户最近一次答题的created_at时间,和当前服务端时间做差值计算,返回是否允许访问的标识,以及剩余的解锁时间(可选)

可选:主动触发定时任务的实现

如果需要在用户解锁时间到达后主动执行逻辑(比如给用户发解锁推送、发放答题奖励),再考虑引入定时调度:

  • 轻量实现:用户完成答题后,向延迟消息队列发送一条延迟24小时的消息,消费端收到消息后执行对应逻辑即可
  • 单体应用可直接用内置定时任务池,提交延迟24小时的任务,注意要做任务持久化避免应用重启后任务丢失
  • 分布式场景可使用XXL-Job、Quartz等定时任务框架,定时扫表处理到达解锁时间的用户即可

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:15:01