我的代码中有以下可运行的线程。
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)
但它也没有用。
答案 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();
}