android 定时器 循环器


//全局唯一计时器 节省资源
public class TimeUtils {

    private static TimeUtils timeUtils;
    ArrayList<WeakReference<OnTimeCallListent>> listents = new ArrayList<>();


    private TimeUtils() {
        mHandler.postDelayed(r, 1000);//延时1000毫秒
    }

    public static synchronized TimeUtils newInstance() {
        if (timeUtils == null) {
            timeUtils = new TimeUtils();
        }
        return timeUtils;
    }

    //向计时器注册回调 无需手动释放 当回调被销毁自动释放 需要注意回调生命周期 匿名回调会被系统直接回收
    public void setCallBack(OnTimeCallListent onTimeCallListent) {
        WeakReference<OnTimeCallListent> weakReference = new WeakReference<>(onTimeCallListent);
        listents.add(weakReference);
    }

    public interface OnTimeCallListent {
        public void onTime(long time);
    }


    final Handler mHandler = new Handler();
    Runnable r = new Runnable() {

        @Override
        public void run() {
            ArrayList<WeakReference<OnTimeCallListent>> mList = new ArrayList<>();
            for (int i = 0; i < listents.size(); i++) {
                OnTimeCallListent listent = listents.get(i).get();
                if (listent != null) {
                    mList.add(listents.get(i));
                    try {
                        listent.onTime(getLongTime() / 1000);

                    }catch (Exception err){
                        LogUtil.e("倒计时出现错误");
                    }
                }
            }
            listents.clear();
            listents = mList;
            mHandler.postDelayed(this, 1000);
        }
    };

    public static Date getDate() {
        Date date = new Date(System.currentTimeMillis());
        return date;
    }

    public static long getLongTime() {
        long dateTime = getDate().getTime();
        return dateTime;
    }
}

使用时无需主动释放资源,采用弱引用持有回调对象,当回调对象被回收 主动释放不影响被持有对象生命周期,需注意 匿名回调会很容易被回收

使用方法 每隔一秒回调一次

TimeUtils.OnTimeCallListent onTimeCallListent = new TimeUtils.OnTimeCallListent() {
        @Override
        public void onTime(long time) {//单位秒
         

            }
        }
    };

TimeUtils.newInstance().setCallBack(onTimeCallListent);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值