在销毁活动时停止Runnable

时间:2014-08-05 05:25:21

标签: android

我的代码中有以下可运行的线程。

private Runnable mUpdateTimeTask = new Runnable() 
{
    public void run() 
    {
               int totalDuration = PlayIt.getDuration();
               int currentDuration = PlayIt.currentLocation();

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

我想在破坏活动的同时停止此运行。我用过这段代码。

@Override
     public void onDestroy(){
        mHandler.removeCallbacksAndMessages(mUpdateTimeTask);
        PlayIt.release();
        super.onDestroy();
     }

但它没有用。

我也试过了,

mHandler.removeCallback(mUpdateTimeTask)

但它也没有用。

1 个答案:

答案 0 :(得分:0)

在Activity终止后阻止postDelay-ed Runnable执行的简单方法是使用Activity.isFinishing(),在这种情况下你不需要在onDestroy中做任何事情。

private Runnable mUpdateTimeTask = new Runnable() 
{
    public void run() 
    {
          if (isFinishing()) return;
          .....

另一种方式是通过一个标志(不是一个花哨的代码,只是为了给出一个想法):

protected boolean stopFlag = false;

private Runnable mUpdateTimeTask = new Runnable() 
    {
        public void run() 
        {
              if (stopFlag) return;

       ..........
       }
}

@Override
public void onDestroy() {
    stopFlag = true;
    .....
    super.onDestroy();   
}