SystemClock类概述

本文介绍了Android系统中三种主要的计时方式:System.currentTimeMillis()、uptimeMillis() 和 elapsedRealtime(),并详细解释了它们各自的特点及适用场景。此外,还讨论了用于控制定时事件的各种机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的概述

核心计时设施。

 

三种不同的时钟是适合的,并且他们不应该被混淆:

System.currentTimeMillis()是一个标准的“墙”时钟(时间和日期)表达毫秒自纪元。该墙时钟能够被用户或电话网络(setCurrentTimeMillis(long))设置,所以时间可能会向前或向后不可预知地跳。该时钟应该仅仅被使用,当现实世界的对应的日期和时间是重要的,例如在一个日历或闹钟应用程序。间隔的或经过的时间测量应该使用一个不同的时钟。如果你使用System.currentTimeMillis()考虑监听 ACTION_TIME_TICKACTION_TIME_CHANGED  ACTION_TIMEZONE_CHANGED意图广播去发现当时间变化的时候。

uptimeMillis()以毫秒为单位进行计数自系统启动时。该时钟停止当系统进入深度睡眠时(CPU关闭,显示黑暗,等待外部输入装置),但是不被时钟调整,闲置或其他节能机制影响。 这是基本的对于大多数时间间隔例如Thread.sleep(millls)Object.wait(millis),和 System.nanoTime()该时钟被保证是单调的,并且是为通用的用户界面事件,性能测量,和其他任何不需要在器件测量经过睡眠时间间隔时间的建议的基础。大多数的方法接受一个时间戳的值除了uptimeMillis()时钟。

elapsedRealtime()以毫秒为单位进行计数自动系统启动,包含深度睡眠。该时钟应该被使用当测量时间间隔可能跨越系统睡眠的时间段。

这有一些机制为了控制定时事件的:

标准的功能像 Thread.sleep(millis)  Object.wait(millis) 都总是合适的。这是功能使用uptimeMillis()时钟;如果该设备进入睡眠,剩余的时间将被推迟直到系统唤醒。这些同步功能可能被中断伴随 Thread.interrupt()方法,并且你必须处理InterruptedException异常。

SystemClock.sleep(millis) 是一种实用工具函数变化类似于Thread.sleep(millis)但是它忽视了InterruptedException异常。使用该函数产生的延迟如果你不使用Thread.interrupt(),因为它会保存线程的中断状态。

处理程序类可以安排在绝对或相对时间异步回调。处理器类对象也使用 uptimeMillis()时钟,并且需要一个event loop(正常呈现在任何一个GUI应用程序上)。该AlarmManager可以触发一次或重复事件去发生即使在深睡眠或你的应用程序没有运行。事件可能有计划的发生伴随你的 currentTimeMillis()(RTC)机会或 elapsedRealtime() (ELAPSED_REALTIME)并且引起一个意图广播当它们发生时。

### 时钟不确定性概述 在计算机系统中,时钟不确定性(Clock Uncertainty)通常指的是由于硬件设计、信号传播延迟或其他因素引起的时钟信号偏差。这种不确定性可能会影响系统的同步性和性能[^1]。 #### 定义与时钟不确定性的来源 时钟不确定性可以分为两主要来源: 1. **抖动 (Jitter)**: 这是指周期性时钟信号中的短期变化,通常是随机的或由噪声引起。它可能导致数据传输错误或者处理器指令执行时间的变化[^2]。 2. **漂移 (Drift)**: 长期来看,两个不同设备之间的时钟频率可能会逐渐偏离彼此的标准速率。这种情况常见于分布式计算环境下的节点间通信中[^3]。 #### 解决方案探讨 为了减少因时钟不确定性带来的负面影响,工程师们采用了多种技术和策略: - **锁相环路(PLL, Phase-Locked Loop):** 通过反馈机制调整本地振荡器频率直到其与参考源匹配为止的方法来稳定内部操作节拍;这种方法广泛应用于微控制器及时序敏感型电路之中[^4]。 - **软件补偿算法(Software Compensation Algorithms):** 当无法完全消除物理层面存在的差异时,则可以通过编程手段来进行校正处理。例如,在网络协议实现过程中加入额外的时间戳记录功能以便后续分析比较实际收发时刻差值并据此作出相应修正动作[^5]。 ```python def adjust_clock(current_time, reference_timestamps): """ Adjust local clock based on received timestamps from multiple sources. Args: current_time (float): Local system time at reception of messages. reference_timestamps (list[float]): List containing timestamp values sent by references. Returns: float: Corrected version of original input value after applying necessary offsets. """ average_offset = sum([ref - current_time for ref in reference_timestamps]) / len(reference_timestamps) corrected_value = current_time + average_offset return corrected_value ``` 上述代码片段展示了一个简单的基于平均偏移量调整本机时钟读数的例子[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值