我希望在screen中有一个定时刷新的功能,如何实现呢?
类似
setInterval(callback, 500)
可以用后台任务实现。
比方说下面的代码(我是在项目的 MainScreen#onAfterShow
中添加的),每隔三秒钟会打印一个 “do task”:
@Autowired
protected BackgroundWorker backgroundWorker;
private static boolean CANCEL_BG_TASK = false;
private static int task_count = 0;
@Subscribe
public void onAfterShow(AfterShowEvent event) {
screenTools.openDefaultScreen(
UiControllerUtils.getScreenContext(this).getScreens());
screenTools.handleRedirect();
BackgroundTask<Integer, Void> task = new BackgroundTask<Integer, Void>(100) {
@Override
public Void run(TaskLifeCycle<Integer> taskLifeCycle) throws Exception {
while (!CANCEL_BG_TASK) { // 只要不取消任务,就一直执行。
TimeUnit.SECONDS.sleep(3);
task_count++;
System.out.println("do task:"+task_count);
if(task_count == 6){
CANCEL_BG_TASK = true; // 你也可以用其他方式结束循环任务。
}
}
return null;
}
};
BackgroundTaskHandler taskHandler = backgroundWorker.handle(task);
taskHandler.execute();
}
好的。谢谢。
我前面也是这样写的,但是我在执行任务后,获取了任务的result,导致线程卡住了。
如果是这种写法,必须不能在外面获取返回值。
画蛇添足了。
嗯嗯,文档中的例子用 taskLifeCycle.publish()
吐出循环任务执行的结果,然后在 progress()
里面处理结果,应该是需要用后台任务的几个生命周期方法才行。