カスタマイズされた 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);
};
};
}