android timer 泄露,Android CountDownTimer工具类 防止内存泄露

直接上代码:

eg: 关键点都在注释里

import android.annotation.SuppressLint;

import android.app.Activity;

import android.os.CountDownTimer;

import android.widget.TextView;

import java.lang.ref.WeakReference;

/**

* 倒计时工具类

* @author yi lu

*/

public class CountDownTimerUtils extends CountDownTimer {

WeakReference mTextView; //显示倒计时的文字 用弱引用 防止内存泄漏

private int mTickType; // 倒计时中的文字显示

private String mFinishTxt; // 倒计时结束后的文字显示

public CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) {

super(millisInFuture, countDownInterval);

this.mTextView = new WeakReference(textView);

}

/**

* 设置文字解析内容(自定义)

*/

public void setTickType(int tickType) {

this.mTickType = tickType;

}

/**

* 设置倒计时结束时的文字

*/

public void setFinishTxt(String finishTxt) {

this.mFinishTxt = finishTxt;

}

@SuppressLint("SetTextI18n")

@Override

public void onTick(long millisUntilFinished) {

if (mTextView.get() == null) //用弱引用 先判空 避免崩溃

{

cancle();

return;

}

mTextView.get().setClickable(false); //设置不可点击

mTextView.get().setText(formatTick(millisUntilFinished)); //设置倒计时时间

mTextView.get().setText(mTextView.get().getText().toString());

}

@Override

public void onFinish() {

if (mTextView.get() == null) //同上 先判空 避免崩溃

{

cancle();

return;

}

mTextView.get().setText(mFinishTxt);//设置结束文字

mTextView.get().setClickable(true);//设置可点击

}

/**

* 退出当前工具类

*/

private void cancle()

{

this.cancel();

}

/**

* 自定义解析模板(根据场景自己编写)

*/

private String formatTick(long millis)

{

switch (mTickType)

{

case 0:

return "重新发送(" + millis / 1000 + "S)";

case 1:

return formatTime(millis);

}

return "";

}

/**

* 将毫秒转化为 分钟:秒 的格式

*

* @param millisecond 毫秒

* @return 格式化后的时间

*/

private String formatTime(long millisecond)

{

int minute;//分钟

int second;//秒数

minute = (int) ((millisecond / 1000) / 60);

second = (int) ((millisecond / 1000) % 60);

if (minute < 10)

{

if (second < 10)

{

return "0" + minute + "分" + "0" + second + "秒";

} else

{

return "0" + minute + "分" + second + "秒";

}

} else

{

if (second < 10)

{

return minute + "分" + "0" + second + "秒";

} else

{

return minute + "分" + second + "秒";

}

}

}

}

调用

private CountDownTimerUtils mCountDownTimerUtils = null;

mCountDownTimerUtils = new CountDownTimerUtils(

tvDown, 3600000, 1000); //倒计时1小时

mCountDownTimerUtils.setTickType(1);

mCountDownTimerUtils.setFinishTxt("交易关闭……");

mCountDownTimerUtils.start();

销毁

@Override

protected void onDestroy() {

if (mCountDownTimerUtils == null) return;

mCountDownTimerUtils.cancel();

mCountDownTimerUtils = null;

super.onDestroy();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值