我找到并使用了下面的一些方法,但它对我不起作用:
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;
}
}