如何在Android中停止工作线程



我找到并使用了下面的一些方法,但它对我不起作用:

myThread.stop() //it is not safe but I am tried that
myThread.interupt
  • 这是我的程序:我想在视频结束时使用Videoview播放视频。如果用户没有在120秒内选择下一个视频,那么我的应用程序将完成。我的视频视图代码:

    Uri uri = Uri.parse(filePath);
    videoView = findViewById(R.id.videoView);
    videoView.setVideoURI(uri);
    waitingThread w8 = new waitingThread();
    
    //set params video before play
    videoView.setOnPreparedListener(mediaPlayer -> {
    PlaybackParams playbackParams = new PlaybackParams();
    playbackParams.setSpeed(DeviceConfig.getInstance().getVideoPeed());// 1.25 1.5 2 2.5
    mediaPlayer.setPlaybackParams(playbackParams);
    // I am tryied using stop thread here
    // w8.stop()
    // or w8.interrupt();
    videoView.start();
    });
    
    videoView.setOnErrorListener((mediaPlayer, i, i1) -> {
    Log.d(TAG,"Video Error");
    //send error message to server
    return false;
    });
    //I call thread when video complete
    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
    **waiting();** -> w8.start //edited i start thread here
    }
    });
    

我的线程正在等待

private  class waitingThread extends Thread{
public void run() {
try {
while (!isInterrupted()) {
timeCount ++;
Thread.sleep(1000);
Log.d(TAG, "Time count : " + timeCount);
if(timeCount == 120){
finish();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//i am try to using this funtion but still not work too.
public void stopping(){
Thread.currentThread().interrupt();
//            timeCount = 0;
//            Log.d(TAG, "Stopping, reset time :" + timeCount);
}
}

简要介绍我的想法:当视频开始播放时,线程等待将停止。当视频完成时,程序将等待一段时间,如果没有视频选择及时等待程序将完成,如果选择了任何视频,则线程w8停止。

我的问题是:当我选择下一个视频时,我的线程"w8";仍然保持跑步。这就是在播放视频时完成我的应用程序Plz帮助我如何解决这个问题或任何相同的想法都很感激

您不想在Thread.currentThread上调用interrupt。Thread.current线程是当前正在运行的线程-它是您正在调用函数的线程。它不是您刚刚创建的线程对象。相反,它会是这个.interrupt((。或者完全去掉这个函数,直接调用interrupt。

引入您自己的布尔变量可能有助于

class waitingThread extends Thread{
boolean stop;
public void run(){
while(!stop){
//your task
}
stop = false; // 
}
public void stopping(){
stop= true;
}
}

最新更新