Android Studio/Kotlin:如何每60秒更新LiveData文本变量
实现LiveData每60秒自动更新
可以借助Fragment的lifecycleScope启动协程来实现定时更新,同时协程会自动跟随Fragment生命周期销毁任务,避免内存泄漏。修改后的代码如下:
@RequiresApi(Build.VERSION_CODES.O) fun get_date_to_new_year(): String { val currentDate = LocalDateTime.now() val needDateToNewYear = LocalDateTime.of(2023, 1, 1, 0, 0, 0) val dateToNewYear = Duration.between(currentDate, needDateToNewYear) return "До нового года " + dateToNewYear.toDays().toString() + " дней\nили " + dateToNewYear.toHours().toString() + " часов\nили " + dateToNewYear.toMinutes().toString() + " минут\nили " + dateToNewYear.seconds.toString() + " секунд" } private var _text = MutableLiveData<String>() val text: LiveData<String> = _text @RequiresApi(Build.VERSION_CODES.O) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 初始赋值 _text.value = get_date_to_new_year() // 启动定时更新协程 viewLifecycleOwner.lifecycleScope.launch { while (true) { delay(60000) // 60秒延迟 _text.value = get_date_to_new_year() } } }
关键说明
- 使用
viewLifecycleOwner.lifecycleScope:协程会在Fragment的View销毁时自动取消,防止内存泄漏。 while(true)配合delay(60000):实现每隔60秒执行一次更新逻辑。- 调整
_text和text的初始化位置:避免给不需要API限制的变量添加@RequiresApi注解,只有调用目标函数时才需要该注解。
内容的提问来源于stack exchange,提问作者TASK
相关产品推荐
相关产品推荐

