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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值