上述提到的时间比较的代码在android源码的位置是哪
时间: 2024-03-29 20:35:22 浏览: 25
在 Android 11 源码中,时间比较和设置的相关代码位于 `frameworks/base/services/core/java/com/android/server/SystemServer.java` 和 `frameworks/base/services/core/java/com/android/server/TimeDetector.java` 文件中。
具体来说,`SystemServer.java` 文件中的 `startBootstrapServices()` 方法会启动 `TimeDetector` 服务,而 `TimeDetector.java` 文件中的 `start()` 方法则会启动一个线程,在该线程中比较当前系统时间和编译时间,并决定是否需要设置时间。
相关问题
Android系统sys目录下的文件在Android源代码中的位置
在Android源代码中,sys目录下的文件通常可以在以下位置找到:
1. 内核源代码(kernel):sys目录下的一些文件是与内核相关的,可以在内核源代码的/sys目录下找到。
2. Android源代码(frameworks/base):sys目录下的一些文件是与系统服务相关的,可以在Android源代码的/frameworks/base/core/java/android/os目录下找到。
3. Android源代码(system/core):sys目录下的一些文件是与系统工具相关的,可以在Android源代码的/system/core/include目录下找到。
那该比较时间的代码在源码中哪里体现
Android 11 系统中比较时间并设置时间的代码主要位于系统服务框架层的 SystemServer 类中。具体来说,在 SystemServer 的 startBootstrapServices() 方法中,会启动一个名为 "time_detector" 的服务,该服务会通过比较当前系统时间和编译时间来判断是否需要设置时间。以下是相关代码片段:
```
// Start the time detector. This is needed to detect when the system's time has
// been set to a time that is not what the network would say. We need to make sure
// that Test Harnesses that rely on the system time being correct do not break.
try {
timemaster = new TimeDetector(mContext, mHandler);
timemaster.start();
ServiceManager.addService("time_detector", timemaster);
} catch (Throwable e) {
reportWtf("starting TimeDetector", e);
}
```
在 TimeDetector 类中,会通过比较系统时间和编译时间,然后决定是否需要设置时间。以下是相关代码片段:
```
final String buildDate = SystemProperties.get("ro.build.date.utc");
final long currentTimeMillis = System.currentTimeMillis();
final long buildTimestampMillis = buildDate.equals("") ? -1 : Long.parseLong(buildDate) * 1000L;
if (buildTimestampMillis > 0 && currentTimeMillis < buildTimestampMillis) {
Slog.i(TAG, "Current time only " + currentTimeMillis + ", advancing to build time " + buildTimestampMillis);
SystemClock.setCurrentTimeMillis(buildTimestampMillis);
}
```
在这里,会先获取编译时间(即系统属性 ro.build.date.utc),然后将其转换为毫秒级别的时间戳。如果编译时间大于 0,且当前系统时间小于编译时间,则会将系统时间设置为编译时间。