我正在使用自定义TextView在ListView中频繁更新时间,这是正常工作。 问题是计时器不断重复其任务,但活动已完成。
请说明活动结束后如何停止计时器。
public class TextViewTimerUpdate extends TextView {
private TimerTask mTimerTask;
private Timer mTimer;
private CharSequence mRelativeTime;
public TextViewTimerUpdate(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TextViewTimerUpdate(Context context) {
super(context);
}
public TextViewTimerUpdate(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private CharSequence mText;
public void setTextForTime(final CharSequence text) {
mText = text;
startTimer();
}
public void startTimer() {
Logger.i("startTimer", "startTimer");
stopTimer();
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
// postInvalidate();
Logger.i("timer", "timer");
Thread th = new Thread(new Runnable() {
@Override
public void run() {
Logger.i("thread", "thread");
mRelativeTime = DateUtils.getRelativeTimeSpanString(
Long.parseLong(mText + ""),
System.currentTimeMillis()
, 0);
handler.sendEmptyMessage(0);
}
});
th.run();
}
};
mTimer.scheduleAtFixedRate(mTimerTask, 0, 8000);
}
public void stopTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
}
private void justSetText(CharSequence text) {
Logger.e("justSetText", text + "");
super.setText(text + "", null);
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
justSetText(mRelativeTime);
};
};
}
答案 0 :(得分:3)
覆盖自定义onDetachedFromWindow()
中的TextView
方法,然后在其中调用stopTimer()
。
答案 1 :(得分:0)
您需要创建第二个处理程序并在该处理程序中调用stopTimer()
。
或者,您可以决定使用AsyncTask
。然后,您可以在stopTimer()
方法
onPostExecute()