Android AccessibilityService getEventTime()时间格式

问题描述 投票:0回答:1

我在Android 7上使用AccessibilityService。可以通过调用AccessibilityEvent来获取每个getEventTime()的时间戳。根据文档,这个方法“获取发送此事件的时间”。

有人知道getEventTime()的回报值是什么意思吗?它似乎不是Unix时间。

android accessibilityservice android-accessibility
1个回答
1
投票

AccessibilityManagerService

该类由系统实例化为系统级服务,并且只能由系统访问。此服务的任务是对设备上所有进程生成的{@link AccessibilityEvent}进行集中式事件调度。事件将分派到{@link AccessibilityService}。

AccessibilityManagerService内部源代码。

private void sendAccessibilityEventLocked(AccessibilityEvent event, int userId) {
    // Resync to avoid calling out with the lock held
    event.setEventTime(SystemClock.uptimeMillis());
    mMainHandler.sendMessage(obtainMessage(
            AccessibilityManagerService::sendAccessibilityEvent,
            this, event, userId));
}

如您所见,在向UI线程发送事件之前,他们将SystemClock.uptimeMillis()作为参数传递给setEventType方法。

有人知道getEventTime()引用的返回值是什么吗?

getEventTime()方法返回传递给setEventType(time)方法的值。

SystemClock.uptimeMillis()

public static long uptimeMillis()

返回自引导以来的毫秒数,不计入深度睡眠所花费的时间。

更新:根据作者的问题

如果我得到启动时间然后添加uptimeMillis()这相当于System.currentTimeMillis()?

不它不是。

来自SystemClock android文档。

SystemClock.uptimeMillis()

自系统启动以来以毫秒为单位计算。当系统进入深度睡眠状态(CPU关闭,显示较暗,设备等待外部输入)时,此时钟停止,但不受时钟缩放,空闲或其他节能机制的影响

System.currentTimeMillis的()

是标准的“墙”时钟(时间和日期),表示自纪元以来的毫秒数。挂钟可以由用户或电话网络设置(请参阅setCurrentTimeMillis(long)),因此时间可能会不可预测地向后或向前跳转。只有在与实际日期和时间对应很重要时,例如在日历或闹钟应用程序中,才应使用此时钟。间隔或经过时间测量应使用不同的时钟。如果您使用的是System.currentTimeMillis(),请考虑侦听ACTION_TIME_TICK,ACTION_TIME_CHANGED和ACTION_TIMEZONE_CHANGED Intent广播以查明时间的变化。

简而言之,SystemClock.uptimeMillis()以毫秒为单位从启动时间返回时间,每次用户关闭电话并重新启动时,它都会重置。例如,你打开手机,10秒后,如果你调用这个方法,它将返回(10 * 1000 = 10000),20秒后,它将是20000,依此类推。

另一方面,System.currentTimeMillis()将在几毫秒内从Epoch time返回时间。它会将当前日期时间转换为毫秒,因此如果您更改设置中的当前日期时间或使用setCurrentTimeMillis(long) API,它将会生效。

© www.soinside.com 2019 - 2024. All rights reserved.