如何取消库的同步方法?

时间:2013-08-11 19:58:55

标签: android asynchronous handler modbus

在我的一个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秒后没有机会取消此方法?

1 个答案:

答案 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;
  }
}