Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何取消一个线程_Android_Multithreading_Media Player_Seekbar - Fatal编程技术网

Android 如何取消一个线程

Android 如何取消一个线程,android,multithreading,media-player,seekbar,Android,Multithreading,Media Player,Seekbar,我正在尝试制作一个带有seekbar的媒体播放器。 当按下暂停或停止按钮时,seekbar应停止进程。我想相应地停止线程。此外,当按下back时,我想再次取消线程。使用线程。currentThread().interrupt() 线程中断 每个线程都有一个与之关联的布尔属性,该属性表示其中断状态。中断状态最初为假;当一个线程通过调用thread.interrupt()被其他线程中断时,会发生以下两种情况之一。如果该线程正在执行一个低级的可中断阻塞方法,如thread.sleep()、thread

我正在尝试制作一个带有
seekbar
的媒体播放器。
当按下暂停或停止按钮时,
seekbar
应停止进程。我想相应地停止线程。此外,当按下back时,我想再次取消线程。

使用线程。currentThread().interrupt()

线程中断

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

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

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

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();

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

不推荐使用@NLV thread.suspend的可能副本,因为它不会释放线程持有的任何锁