不能破坏线程

时间:2011-03-24 07:55:02

标签: android multithreading progress-bar android-progressbar

我正在制作媒体播放器,我有进度条。 单击播放按钮后,线程将启动,这将设置进度条的进度。 单击暂停按钮时,线程将停止。

但是当我按下停止按钮时,我希望进度条回滚并在点击播放时再次启动,因此我希望线程可以销毁,但我无法执行此操作。 按下停止按钮时调用suspend()方法给出: -

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

我知道这是一个弃用的方法,但请告诉我如何在按下停止按钮时销毁线程。以下是我的代码的一部分: -


 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

停止进度条给我上面提到的错误

1 个答案:

答案 0 :(得分:0)

无法使用suspend或destroy方法停止线程... 当按下停止按钮时..
使用此How to stop a thread

检查此代码...并且这样做是最安全的方式来获得一个标志,以便线程在其主循环中检查它。

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

}

希望这会有所帮助..