高级用法
使用超时尽可能减少唤醒租约的获取
假设您有一个驱动程序 X,它会接收可唤醒系统的中断。驱动程序对中断进行一些处理,并将事件传递给驱动程序 Y。我们实际上只希望在有实际唤醒系统的中断到达时,或者在 Driver X 观察到系统在上次收到中断后的超时期限内开始暂停时,Driver X 获得唤醒租约。
使用协议互锁时,此策略不适用,因为该策略可保证驱动程序 Y 已处理事件。
如需了解如何观察系统暂停转换,请参阅对暂停或恢复执行操作。如果驱动程序 X 在观察到挂起之后、观察到恢复之前收到中断,则应调用 ActivityGovernor.AcquireWakeLease
。然后,驱动程序 X 可以确认中断、安排丢弃唤醒租约的时间,并将事件传递给驱动程序 Y。
驱动程序 X 必须记录上次收到中断的时间。当驱动程序 X 观察到系统挂起时,必须查看当前时间是否小于上次中断到达时间加上超时时间;如果是,则获取唤醒租约并保持该租约,直到上次收到的中断超时。
在这里,使用超时作为解决方案具有挑战性,因为我们必须猜测 Driver Y 接收事件并进行处理所需的时间。实际上,要确定合适的超时值更难,因为我们通常不仅要考虑驱动程序 Y 中的时间,还要考虑组件 1、组件 2 等。另一个挑战是选择适用于驱动程序 X 在其上运行的所有系统配置的超时值。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-01-29。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-01-29。"],[],[]]