【发布时间】:2016-02-27 17:44:34
【问题描述】:
我正在使用 Java executorservice 在我的一个应用程序中创建超时效果。经过一段时间后,他们执行服务开始并将用户从他们的会话中注销。但是在 Android 设备上,当设备进入睡眠状态时,执行器线程被挂起。设备唤醒后,线程被取消挂起。我想更改执行程序正在使用的时钟,以便即使在设备进入深度睡眠后它也能继续计数。有没有办法我可以覆盖正在使用的时钟(我意识到我可以换掉整个实现并使用警报管理器,但我希望此时不要更改现有代码,所以请不要尝试提供其他 API)。
我的问题是,尽管设备处于睡眠状态,但必须有一个系统时钟继续运行,我怎样才能让 executor scheduler 使用该时钟而不是它现在使用的时钟,这尊重设备进入深度睡眠和暂停滴答作响?
我目前的代码非常简单,看起来像这样:
myExecutorService.schedule(new EndUserSession(),
6L, TimeUnit.MINUTES);
上面的这段代码在 6 分钟内启动 EndUserSession()。它可以工作,但我想使用另一个不考虑移动设备超时的时钟。
【问题讨论】:
标签: java multithreading executorservice scheduledexecutorservice system-clock