mac*_*ery 3 android accessibilityservice android-accessibility
我AccessibilityService在 Android 7 上使用。可以AccessibilityEvent通过调用getEventTime(). 根据文档,此方法“获取发送此事件的时间”。
有人知道返回值getEventTime()是指什么吗?它似乎不是 Unix 时间。
无障碍管理服务
此类由系统实例化为系统级服务,只能由系统访问。此服务的任务是为在设备上的所有进程中生成的 {@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));
}
Run Code Online (Sandbox Code Playgroud)
如您所见,在向 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 中更改当前日期时间,它将受到影响。
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |