我已经多次阅读此页面,并且 只是没有看到GwT的
Timer
之间的一些固有差异
和
Scheduler
类.我正在寻找以下各项的用例和适用性:
-
Timer
,Timer::schedule
和Timer::scheduleRepeating
-
Scheduler::scheduleDeferred
-
Scheduler::scheduleIncremental
-
IncrementalCommand
-
DeferredCommand
这些似乎或多或少都在做着相同的事情,感觉您可以用所有这些东西实现相同的目标.这仅仅是GwT的一种方式,提供了多种完成同一件事的方式吗? 如果没有,请帮助我了解何时以及在何处适当使用它们。
最新回答
- 2021-1-111 #
- 2021-1-112 #
正如JavaDoc所说,
DeferredCommand
不赞成使用Scheduler
.DeferredCommand
的问题 和IncrementalCommand
它们具有静态状态(这使得在测试中难以可靠使用).此外,它们的(静态)方法进行JSNI调用,这迫使您使用GWTTestCase
测试您的代码(静态方法不容易模拟).静态方法还使其无法包装(例如,添加一些日志记录或其他内容)。
另一方面,您使用Scheduler
的实例 (如果您需要可测试的代码,则将使用依赖注入来获取调度程序的实例,并且永远不会调用Scheduler.get()
除了您的DI"工厂"中).在测试中,您可以使用StubScheduler
例如。然后有
Timer
,与其他类似,但是可以取消计划的任务.请注意Timer
就像DeferredCommand
一样,也使用JSNI ; 任何使用Timer
的代码 将需要一个GWTTestCase
进行单元测试。
使用 Scheduler 当您需要浏览器完成当前正在执行的操作,然后告诉它执行其他操作时.例如:
在此示例中,只有在浏览器完成对话框的呈现之前,才会设置焦点,因此您告诉程序等待直到浏览器准备就绪。
使用 Timer 如果您希望在指定的时间段后执行某些操作.例如:
此代码将显示notificationPanel,然后在10秒后将其隐藏。