Jetpack Compose 显示时间
Jetpack Compose 显示时间
- 介绍
- 主体代码
- 使用
介绍
在软件中实时显示时间
主体代码
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.Timer
import java.util.TimerTask
// 可复用的时间模块函数,用于获取实时的日期和时间
@Composable
fun RealtimeTimeModule(): String {
// 使用 remember 和 mutableStateOf 创建一个可变状态,用于存储当前的日期和时间
// 初始值通过调用 getCurrentDateTime 函数获取
var currentDateTime by remember { mutableStateOf(getCurrentDateTime()) }
// 获取当前组件的生命周期所有者
val lifecycleOwner = LocalLifecycleOwner.current
// 使用 DisposableEffect 处理副作用,比如启动和停止定时器
// 当 lifecycleOwner 发生变化时,会重新执行该副作用
DisposableEffect(lifecycleOwner) {
// 创建一个 Timer 对象,用于定时任务
val timer = Timer()
// 创建一个 TimerTask 对象,该任务会在定时器触发时执行
val task = object : TimerTask() {
override fun run() {
// 每秒更新一次当前的日期和时间
currentDateTime = getCurrentDateTime()
}
}
// 创建一个 LifecycleEventObserver,用于监听生命周期事件
val observer = LifecycleEventObserver { _, event ->
when (event) {
// 当组件进入可见状态时,启动定时器,每秒执行一次任务
Lifecycle.Event.ON_RESUME -> timer.schedule(task, 0, 1000)
// 当组件进入不可见状态时,取消定时器,避免资源浪费
Lifecycle.Event.ON_PAUSE -> timer.cancel()
// 忽略其他生命周期事件
else -> {}
}
}
// 将 LifecycleEventObserver 注册到当前组件的生命周期中
lifecycleOwner.lifecycle.addObserver(observer)
// 当 DisposableEffect 被销毁时,执行清理操作
// 取消定时器并移除生命周期观察者
onDispose {
timer.cancel()
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
// 返回当前的日期和时间
return currentDateTime
}
// 获取当前包含年月日时分秒的时间
fun getCurrentDateTime(): String {
// 创建一个 SimpleDateFormat 对象,指定日期和时间的格式为 "yyyy-MM-dd HH:mm:ss"
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
// 使用 Date 对象获取当前时间,并通过 dateFormat 进行格式化
return dateFormat.format(Date())
}
使用
// 调用 RealtimeTimeModule 函数获取实时的日期和时间
val time = RealtimeTimeModule()
// 使用 Text 组件显示实时的日期和时间
Text(text = time)