Pregunta

Estoy haciendo el reproductor de medios y tengo la barra de progreso en ella. Cuando se hace clic en el botón PLAY, el hilo comienza lo que establecerá el progreso de la barra de progreso. Cuando se hace clic en el botón Pausa, el hilo se detendrá.

Pero cuando presiono el botón de parada, quiero que la barra de progreso se reúne y comience de nuevo cuando se haga clic en el juego, por lo tanto, quiero que el hilo destruya, pero no puedo hacerlo. Método de suspensión de llamadas () Cuando se presiona el botón de parada, da: -

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

Sé que este es un método desaprobado, pero por favor guíeme cómo destruir el hilo cuando se presiona el botón de parada.Siguiendo es la parte de mi código: -


 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();
            }*/

y la siguiente es mi clase de hilo: -

 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

La barra de progreso de la parada me da el error mencionado anteriormente

¿Fue útil?

Solución

no puede usar los métodos de suspensión o destruir para la parada de hilo ... Cuando se presiona el botón de parada.


Usa este Cómo detener un hilo

Compruebe este código ... y hágalo así es la forma más segura de tener una bandera para que el hilo lo compruebe dentro de su bucle principal.

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;
    }

}

Espero que esto ayude ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top