更新:我也发现其他线程的问题;他们进入 Scheduled 状态,但从未转换到 Running。为什么?
我的程序有一个使用任务通过串行端口连接到设备的服务。换句话说,
public class ConnectService extends Service<String> {
protected Task createTask() {
return new ConnectTask();
}
class ConnectTask extends Task<ObservableList<String>> {
@Override
protected ObservableList<String> call() throws Exception {
...
connect();
...
}
}
}
如果先前连接到设备的调用挂起,那么我想取消任务/线程并在此尝试中重新开始。为此,
if (connectService.getState() != Worker.State.READY) {
connectService.cancel();
}
connectService.restart();
但是在调试器中,我发现如果状态是 SCHEDULED,那么上面的代码会将其发送到 CANCELLED。但是 restart() 不会将其发送到 READY - 相反它会返回 SCHEDULED - 并且call() 不会被执行!
这似乎与此处的文档相矛盾
可重用的 Worker 将从 CANCELLED、SUCCEEDED 或 FAILED 转换回 READY。
我试过
if (connectService.getState() != Worker.State.READY) {
connectService.cancel();
connectService.reset();
}
connectService.start();
现在状态回到 READY,但 call() 永远不会执行!