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

Kotlin中如何让TimerTask每5秒重复执行,实现定时刷新RecyclerView?

问题原因

你调用的是双参数的Timer.schedule()重载,该方法仅支持延迟指定时间后执行1次任务,未配置重复执行间隔,所以不会循环触发。

解决方案

1. 修改Timer初始化逻辑

首先把Timer声明为Fragment的全局成员变量,方便后续生命周期管理,同时调用三参数的schedule重载实现重复执行,示例代码如下:

// Fragment全局声明Timer变量,可空方便销毁时置空
private var funtimer: Timer? = null

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // 可选:页面初始化时先执行一次拉取,不需要等5秒首次延迟
    jsonParse()
    
    funtimer = Timer()
    // schedule参数说明:要执行的任务、首次执行的延迟时间、两次执行的间隔时间,单位均为毫秒
    funtimer?.schedule(timerTask {
        jsonParse()
    }, 5000, 5000)
}

2. 补充生命周期适配,避免内存泄漏

需要在Fragment销毁视图时停止定时器,避免页面销毁后后台仍继续请求、引发空指针崩溃或者内存泄漏:

override fun onDestroyView() {
    super.onDestroyView()
    // 停止定时器任务并回收资源
    funtimer?.cancel()
    funtimer = null
}

额外注意点

  • Timer的任务默认运行在子线程,你当前代码中用Volley发起网络请求,请求的成功/失败回调自动切换到主线程更新UI,不会出现子线程操作UI的崩溃;如果后续需要直接在timerTask中操作视图,需要通过Handler或者view.post{}手动切换到主线程。
  • 如果需要更稳定的后台轮询能力,可替换为Coroutine定时任务或者WorkManager实现,Timer存在系统后台回收后停止运行、单任务异常会终止整个定时器的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:06:02