我在Android 7上使用AccessibilityService
。可以通过调用getEventTime()
获取每个AccessibilityEvent
的时间戳。根据文档,此方法将“获取此事件发送的时间”。
有人知道getEventTime()
的返回值是什么吗?它似乎不是Unix时间。
我在Android 7上使用AccessibilityService
。可以通过调用getEventTime()
获取每个AccessibilityEvent
的时间戳。根据文档,此方法将“获取此事件发送的时间”。
有人知道getEventTime()
的返回值是什么吗?它似乎不是Unix时间。
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)
方法的值。
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意图广播,以了解时间何时更改。
SystemClock.uptimeMillis()
返回自开机以来的毫秒数,每次用户关机并重新启动手机时都会重置。例如,您打开手机,在10秒后调用此方法,它将返回(10 * 1000 = 10000)毫秒,20秒后它将是20000毫秒,以此类推。System.currentTimeMillis()
将返回自纪元时间以来的毫秒数。它将当前日期时间转换为毫秒,因此如果您在设置中更改当前日期时间或使用setCurrentTimeMillis(long)
API,则会受到影响。