Вопрос

Я делаю медиаплеер, и у меня есть прогресс в нем. Когда кнопка воспроизведения нажата, то нить запускается, что установит прогресс бар прогресса. Когда кнопка Pause нажала, нить остановится.

Но когда я нажимаю кнопку «Стоп», я хочу, чтобы панель прогресса в откату и запускается снова, когда игра нажала, поэтому я хочу, чтобы нить уничтожить, но я не могу этого сделать. Способ приостановки () При нажатии кнопки остановки дает: -

 03-24 13:17:27.855: ERROR/global(26971): java.lang.UnsupportedOperationException
.

Я знаю, что это устаревший метод, но, пожалуйста, GUID ME Как уничтожить нить при нажатии кнопки Стоп.Ниже приведена часть моего кода: -


 public void onClick(View src) {
        switch (src.getId()) {
        case R.id.buttonStart:
            if(DataManager.getInstance().getSongPause()=="y"){
                myService.player.start();
                DataManager.getInstance().setSongPause("n");
                buttonStart.setVisibility(View.GONE);
                buttonPause.setVisibility(View.VISIBLE);
            //  DataManager.getInstance().setWantsToPlaySong(true);
                //DataManager.getInstance().setOnPausedSong("n");
                //DataManager.getInstance().setOnPausedSong("y");
                if(mt.paused==true){
                    mt.unPauseProgressBar();

                }
            }else{
        stopService(new Intent(this, MyService.class));
            DataManager.getInstance().setSong_uri(uri); 
            Intent intent = new Intent(this,MyService.class);
            Bundle b = new Bundle();
            b.putString("song_uri",uri );
            intent.putExtras(b);
            startService(intent);
            buttonStart.setVisibility(View.GONE);
            buttonPause.setVisibility(View.VISIBLE);
            DataManager.getInstance().setOnPausedSong("y");
            DataManager.getInstance().setPausedSongName(songName);
            //Toast.makeText(this, "My Service Started "+DataManager.getInstance().getSongDuration(), Toast.LENGTH_LONG).show();
            //new Thread(myThread).start();
            }
            //Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
            break;
        case R.id.buttonStop:
          Log.d(TAG, "onClick: stopping srvice");
          stopService(new Intent(this, MyService.class));
          buttonStart.setVisibility(View.VISIBLE);
            buttonPause.setVisibility(View.GONE);
            /*mt=null;
            seekbar.setProgress(0);*/
            mt.stopProgressBar();

            //mt.destroy();

            //mt.notify();


     break;
        case R.id.buttonforward:

             stopService(new Intent(this, MyService.class));
             current_song++;
            FetchAllMusic fetchAllMusic = new FetchAllMusic();
            fetchAllMusic.execute();
            //new Thread(myThread).start();


                break;
        case R.id.buttonbackward:
              Log.d(TAG, "onClick: stopping service");
              stopService(new Intent(this, MyService.class));
              if(current_song>0){   
              current_song--;
               }
                FetchAllMusic fetchAllMusic2 = new FetchAllMusic();
                fetchAllMusic2.execute();

              break;
        case R.id.buttonPause:
              buttonStart.setVisibility(View.VISIBLE);
                buttonPause.setVisibility(View.GONE);
            /* MyService myservice=new MyService();
             myservice.onPause();*/
                myService.player.pause();
            //  myThread.
                DataManager.getInstance().setSongPause("y");
                DataManager.getInstance().setWantsToPlaySong(false);
                DataManager.getInstance().setOnPausedSong("n");
                DataManager.getInstance().setPausedSongName(songName);

                mt.pauseProgressBar();

            /*try {
                //Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/

.

и следующие мой класс потоков: -

 class myThread extends Thread implements Runnable{
            //      long duration=DataManager.getInstance().getSong_duration();
        //long value=duration/100;
          private volatile boolean paused = false;
            private volatile boolean finished = false;

                    @Override
                    public void run()

                    {

                        while(!finished){
                    while (myProgress
.

Stop Progress Bar дает мне вышеупомянутую ошибку

Это было полезно?

Решение

Вы не можете использовать либо приостановить, либо уничтожать методы остановки потоков ... Когда кнопка остановки нажата ..
Используйте это Как остановить нить

Проверьте этот код ... И понравилось, это самый безопасный способ иметь флаг, чтобы нить проверил для него в его основной цикле.

class ScanningThread extends Thread {
    // Must be volatile:
    private volatile boolean stop = false;

    public void run() {
            while (!stop) {
                    System.out.println("alive");
            }
            if (stop)
                    System.out.println("Detected stop");
    }

    public synchronized void requestStop() {
            stop = true;
    }
}
public synchronized void startThread(){
    if(runner == null){
            android.util.Log.v("@@@@@@@@@@@@@@@@@@@@", "DoScan.startthread");         
            runner = new ScanningThread();
            runner.start();
    }
}
public synchronized void stopThread(){
    if(runner != null){
            android.util.Log.v("@@@@@@@@@@@@@@@@@@@@", "DoScan.stopthread");
            runner.requestStop();
            runner = null;
    }
.

}

Надеюсь, это поможет ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top