0

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

4

1 回答 1

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;
  }
}
于 2013-08-11T20:14:23.950 回答