簡體   English   中英

如何停止 Android 中的工作線程

[英]How to stop worker thread in 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”仍在運行。 那就是在播放視頻時完成我的應用程序請幫助我如何解決該問題或任何相同的工作想法表示贊賞

您不想在 Thread.currentThread 上調用中斷。 Thread.currentThread 是當前正在運行的線程 - 它是您正在調用 function 的線程。 這不是您剛剛創建的線程 object。 相反,它將是 this.interrupt()。 或者完全擺脫 function 並直接調用中斷。

介紹您自己的 boolean 變量可能會有所幫助

class waitingThread extends Thread{

    boolean stop;

    public void run(){
        while(!stop){
            //your task
        }
     stop = false; // 
    }

    public void stopping(){
        stop= true;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM