gpt4 book ai didi

android - 在自定义 TextView 中停止 Timer()

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:46 25 4
gpt4 key购买 nike

我在 ListView 中使用自定义的 TextView 来频繁更新时间,它工作正常。问题是计时器不断重复它的任务,但 Activity 已经完成。

请解释如何在 Activity 结束时停止计时器。

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

}

最佳答案

覆盖自定义 TextView 中的 onDetachedFromWindow() 方法,并在其中调用 stopTimer()

关于android - 在自定义 TextView 中停止 Timer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com