Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当没有时间源时,Android源代码的哪一部分决定了Android的初始时间?_Java_C++_Time_Embedded Linux_Android 9.0 Pie - Fatal编程技术网

Java 当没有时间源时,Android源代码的哪一部分决定了Android的初始时间?

Java 当没有时间源时,Android源代码的哪一部分决定了Android的初始时间?,java,c++,time,embedded-linux,android-9.0-pie,Java,C++,Time,Embedded Linux,Android 9.0 Pie,我目前是一名工程师,负责安卓p的系统时间设置/同步 当我们构建Android并第一次加载它时,我们可以看到初始时间已经设置好(无论是正确的时间还是错误的时间)。我不知道在没有激活任何时间源(wifi、GPS等)的情况下从何处获取初始时间设置。粗略的猜测是,也许这个时间参考可以从linux时间信息中获得,但正如我所说的,这只是一个猜测,我不知道如何证明/检查代码 有人能给我一个启示吗? 谢谢。几乎所有现代CPU/主板都有RTC(实时时钟),这是一个独立于任何外部时间源维护时间的组件。在没有外部时间

我目前是一名工程师,负责安卓p的系统时间设置/同步

当我们构建Android并第一次加载它时,我们可以看到初始时间已经设置好(无论是正确的时间还是错误的时间)。我不知道在没有激活任何时间源(wifi、GPS等)的情况下从何处获取初始时间设置。粗略的猜测是,也许这个时间参考可以从linux时间信息中获得,但正如我所说的,这只是一个猜测,我不知道如何证明/检查代码

有人能给我一个启示吗?
谢谢。

几乎所有现代CPU/主板都有RTC(实时时钟),这是一个独立于任何外部时间源维护时间的组件。在没有外部时间同步源的情况下,这是关于时间的真相的来源

RTC通常由自己的电池/超级电容器供电,因此即使您断开主电池,RTC也会继续运行


在底层Linux设备文件系统中,此设备通常公开为/dev/rtc*

作为一名电子工程师,我将尝试以更现实的方式回答这个问题

主板上有一个特殊的部件(称为RTC),它的设计就是为了跟踪时间。正如@Lie Ryan所说,它有自己的电池和相对较大的电容器。此外,还有一种特殊的芯片,基本上起到计数器的作用。您可以对其进行初始化、加载新数据等。该芯片由专用电池供电(通常非常小)。该芯片可以从晶体和CPU获得输入。一旦系统组装好并放置好电池,即使主系统没有电池,它也会开始计数。存储在其中的值不断增加。它将晶体频率作为参考频率,使其成为时钟信号,并将其用作参考时钟。计数器的值在每次固定数量的晶体振荡(时钟信号)时增加。当您接通系统电源时,假设系统设置为从RTC读取实时数据,它将读取存储在该芯片中的值,并以系统设置的格式对其进行解码

如果您得到的值是错误的,在从互联网或手动设置时间后,您加载新数据,芯片继续从新的参考计数。由于现实世界系统的缺陷(晶体振荡频率以百分比误差给出),如果您没有设置足够长的时间,系统的时间可能无法与实时同步(正如您可能已经练习过的那样)。或者,如果您等待的时间足够长,电池就会断电,系统无法工作