当前位置: 首页 > news >正文

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)

相关文章:

  • 深入Python C API:掌握常用函数与实战技巧
  • 星越L_驾驶模式讲解
  • java项目之在线购物系统(源码+文档)
  • 【商城实战(54)】解锁商城国际化密码:内容管理全攻略
  • 【PCB工艺】晶体管的发展历史
  • 如何提升 Java 开发能力?
  • 智能施工方案生成工具开发实践:从架构设计到核心实现
  • 25年护网二面
  • MySQL -- 复合查询
  • 关于VMware安装win11出现此电脑无法运行win11系统解决方法
  • Spring Boot整合MyBatis
  • 智能搜索时代:如何通过AI搜索与GEO策略打造品牌护城
  • 银河麒麟操作系统的上下游版本判断
  • AI鸟类识别技术革新生态监测:快瞳科技如何用“智慧之眼”守护自然?
  • yarn 装包时 package里包含sqlite3@5.0.2报错
  • ruoyi-vue部署4
  • 第六届电气、电子信息与通信工程国际学术会议 (EEICE 2025)
  • Hadoop NN和JN VERSION版本不一致
  • 洛谷题目:P1018 [NOIP 2000 提高组] 乘积最大 题解
  • day16 没进展怎么炼丹
  • 港股5月迎开门红,恒生科指涨3%,欧股开盘全线上扬
  • 特朗普称将禁止伊朗石油买家与美国做生意
  • 专家分析丨乌美签署矿产协议,展现美外交困境下的无奈
  • 铁路上海站迎五一假期客流最高峰,今日预计发送77万人次
  • 国台办:提醒相关人员不要假借去第三地名义绕道赴台
  • 78家公募年度业绩比拼:23家营收净利双升,十强座次微调