1

我正在尝试制作一个具有seekbar. 当seekbar按下暂停或按下停止时应该停止进度。我想相应地停止线程。此外,当按下返回时,我想再次取消线程。

4

2 回答 2

3

使用Thread.currentThread().interrupt()

线程中断

每个线程都有一个与之关联的布尔属性,表示其中断状态。中断状态最初为假;当一个线程通过调用 Thread.interrupt() 被其他线程中断时,会发生两种情况之一。如果该线程正在执行低级可中断阻塞方法,如 Thread.sleep()、Thread.join() 或 Object.wait(),它会解除阻塞并抛出 InterruptedException。否则,interrupt() 仅设置线程的中断状态。在被中断线程中运行的代码稍后可以轮询被中断状态,以查看是否已请求停止正在执行的操作;中断状态可以使用 Thread.isInterrupted() 读取,并且可以使用名称不佳的 Thread.interrupted() 在单个操作中读取和清除。

中断是一种合作机制。当一个线程中断另一个线程时,被中断的线程不一定会立即停止它正在做的事情。相反,中断是一种礼貌地要求另一个线程在方便时停止它正在做的事情的方式。一些方法,比如 Thread.sleep(),会认真对待这个请求,但是方法不需要注意中断。不阻塞但仍可能需要很长时间执行的方法可以通过轮询中断状态来尊重中断请求,并在中断时提前返回。您可以随意忽略中断请求,但这样做可能会影响响应能力。

中断的合作性质的好处之一是它为安全地构建可取消活动提供了更大的灵活性。我们很少希望活动立即停止;如果活动在更新过程中被取消,程序数据结构可能会处于不一致的状态。中断允许可取消的活动清理任何正在进行的工作,恢复不变量,通知其他活动取消,然后终止。

于 2011-03-19T12:27:07.957 回答
0
boolean running = true;
final Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            while(running){
                 //Your code
            }
        } catch (Exception e) {
        // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //handler code

    }
});
t.start();

定义“运行”布尔值将管理线程何时执行其代码,当您将运行设置为 false 时,搜索栏将停止而不会中断或终止线程。

于 2012-06-26T19:22:52.823 回答