java - Android取消线程

标签 java android multithreading asynchronous

我正在使用 Android 执行一个简单的异步操作,但由于我想执行几次操作,所以我没有使用 AsyncTask,而是使用带有 Handler 的 Thread/Runnable 机制来处理消息和人员。但是在某一时刻,当我需要执行第二个操作时,如果前一个操作仍然处于 Activity 状态,我需要取消它。

我有这样的东西:

private void exec() {
    new Thread(new Runnable() {
    public void run() {
    mBind.exec(3);
    }
  }).start();
}

然后在 exec(int a) 中我有一个像这样的交互:

for(int i = 0; i<=res.lenght; i++) {
   updateGui();
}

但有一次 exec() 方法被第二次调用,并且 gui 也更新为以前的结果(我只需要新的(第二次)请求的结果)。

我知道可以通过 FutureTask 和 cancel() 或 Thread 的“抛出 ThreadDead”异常来实现这一点,但我只是好奇我是否可以像一开始那样做。

谢谢!

最佳答案

我从你的问题中了解到,如果新线程启动,你想取消当前正在运行的线程。

这可以通过调用Thread 的interrupt() 方法来实现,这将中断当前正在运行的线程,并抛出InterruptedException。

Thread t1 = null;
private void exec() {
    t1 = new Thread(new Runnable() {
    public void run() {
    mBind.exec(3);
    }
  }).start();
}

调用exec之前,调用t1.interrupt()。

关于java - Android取消线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4843755/

相关文章:

android - Android是否在连接或断开网络时提供任何监听器或回调方法?

android - 单击子布局中的元素时更改可扩展列表 subview 的背景

java - 并发读取文本文件并将数据放入数组的线程

java - 如何通过在 Mac 上分配更多 RAM 的终端运行 .jar

java - split(//s+) 不删除空格

java - 为什么不是原始类型,泛型类中的静态变量?

c++ - std::thread,在 `this' 上启动线程(从类本身内部)

java - 如何将 R.drawable 作为参数传递,以便解析图像

android - 如何使用不存在或过时的 Google Play 服务测试 Android 应用程序?

ios - 是否使用GCD?