在我的一个Android项目中,我正在使用jamod库进行Modbus通信,它可以正常工作。除非网络连接不可用,否则我的异步任务将被卡在transaction.execute
上几秒钟。我想在给定超时后取消它。我试图为此实现一个处理程序来取消异步任务:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (task.getStatus() == AsyncTask.Status.RUNNING
|| task.getStatus() == AsyncTask.Status.PENDING) {
task.cancel(true);
}
}
}, WRITE_TASK_TIMOUT);
但这种方法不起作用。我查看了库,发现ModbusTCPTransaction.execute()
方法使用了synchronized()
。
这是否意味着我在x秒后没有机会取消此方法?
答案 0 :(得分:1)
您可以尝试使用Android类Future。它有方法来设置线程执行的超时时间。
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Task());
future.get(5, TimeUnit.SECONDS);
static class Task implements Callable<String> {
@Override
public String call() throws Exception {
//ModbusTCPTransaction.execute()
return null;
}
}