2012-12-28 39 views
-1

如果我啓用每秒刷新線程(刷新用於更新歌曲和進度條的運行時間),則每次嘗試關閉它時,都會造成音樂播放器崩潰。這裏是代碼:關閉刷新線程時出現故障

/** 
* Background Runnable thread 
* */ 
private Runnable mUpdateTimeTask = new Runnable() { 
     public void run() { 
      long totalDuration = mp.getDuration(); 
      long currentDuration = mp.getCurrentPosition(); 

      // Displaying Total Duration time 
      songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration)); 
      // Displaying time completed playing 
      songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration)); 

      // Updating progress bar 
      int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 
      //Log.d("Progress", ""+progress); 
      songProgressBar.setProgress(progress); 

      // Running this thread after 100 milliseconds 
      mHandler.postDelayed(this, 100); //this line is causing errors 
     } 
    }; 

這一切再次在活動中工作,但只要我按下後退按鈕它崩潰。有任何想法嗎?由於

+2

顯示logcat,所以我們知道你的意思是'崩潰'。 – wtsang02

+0

如何以可讀格式粘貼logcat? – murtaugh

+0

通過向其添加代碼標籤。 – wtsang02

回答

1

嘗試停止與removeCallbacks()今後回調中onPause()或類似的方法:

mHandler.removeCallbacks(mUpdateTimeTask); 

如果我啓用刷新線程每秒

你似乎想每秒運行一次你的代碼,但你使用...

// Running this thread after 100 milliseconds 
mHandler.postDelayed(this, 100); //this line is causing errors 

瞭解處理程序和運行列表默認情況下不會在新線程中創建,並且100毫秒的延遲會每秒執行10次您的代碼。

+0

哎呀,我的意思是每秒十分之一..我會嘗試你的建議吧! :) – murtaugh

+0

愚蠢的我在做活動,但不是在退出......無論如何,我添加了'mHandler.removeCallbacks(mUpdateTimeTask);'在onDestroy和它完美的作品,謝謝! – murtaugh