zoukankan      html  css  js  c++  java
  • 对于太多的不确定需求,封装方法最好写接口方便使用

    /**
    * 在控件上显示倒计时
    * @param countDownTime 全部的倒计时时间(单位:s)
    * @param interval 更新间隔(单位:s)
    * @param listenerCountDownTimerFinish 监听事件
    * return countDownTimer 在倒计时没有关闭的时候可以取消倒计时
    * */
    public static android.os.CountDownTimer startTimer(int countDownTime,
    int interval,
    final ListenerCountDownTimerFinish listenerCountDownTimerFinish)
    {
    android.os.CountDownTimer countDownTimer = null;
    // 由于CountDownTimer并不是准确计时,在onTick方法调用的时候,time会有1-10ms左右的误差,这会导致最后一秒不会调用onTick()
    // 因此,设置间隔的时候,默认减去了10ms,从而减去误差。
    // 经过以上的微调,最后一秒的显示时间会由于10ms延迟的积累,导致显示时间比1s长max*10ms的时间,其他时间的显示正常,总时间正常
    countDownTimer = new android.os.CountDownTimer(countDownTime * 1000, interval * 1000 - 10) {
    long timeInt ;
    @Override
    public void onTick(long time) {
    // 第一次调用会有1-10ms的误差,因此需要+15ms,防止第一个数不显示,第二个数显示2s
    timeInt = (time + 15) / 1000;
    if(listenerCountDownTimerFinish != null){
    listenerCountDownTimerFinish.onTick(timeInt);
    }
    }
    @Override
    public void onFinish() {
    if(listenerCountDownTimerFinish != null){
    listenerCountDownTimerFinish.onFinish();
    }
    }
    };
    if(countDownTimer != null){
    countDownTimer.start();
    }
    return countDownTimer;
    }

    对于太多的不确定需求,其实核心代码已封装,用接口能够最大限度的扩展,不至于有新的需求去改代码,接口只暴露方法,最大限度的提高了扩展和复用,最后把countDownTimer 返回,方便页面关闭,倒计时没结束,可以在onDestory(); countDownTimer.cancl();取消,防止内存泄漏

    上面是最后封装的代码,传入的接口,在countDownTimer 的onTick()方法里写上 listenerCountDownTimerFinish.onFinish();在countDownTimer 的onFinish()方法里写上 listenerCountDownTimerFinish.onFinish(); 然后调用哪里,哪里实现就会有这两个方法,比较方便.

    在Activity 直接调用即可,下面是调用的示例代码:

    PublicMethodUtil.startTimer(4, 1, new ListenerCountDownTimerFinish() {
    @Override
    public void onTick(long second) {
    showCountDownTime = second + "s后自动跳转";
    tv_time.setText(showCountDownTime);
    }

    @Override
    public void onFinish() {
    Intent intent = new Intent(ActivityPayWaitResult.this, ActivityOrderLists.class);
    intent.putExtra("person_status", AppConstant.ORDER_BUYER);
    startActivity(intent);
    if (tourdiy_group_id > 0) {
    //拼团详情h5
    String[] configHost = getResources().getStringArray(R.array.site_url);
    Intent intent_more = new Intent(ActivityPayWaitResult.this, WebViewActivity.class);
    intent_more.putExtra("url","http://"+configHost[0]+"/index.php?app=wap&mod=MallTourdiy&act=group&group_id="+tourdiy_group_id);
    intent_more.putExtra("type","token_url");
    intent_more.putExtra("api_version",true);
    startActivity(intent_more);
    }
    finish();
    }
    });

    
    
     作者:郝金刚
    
    
    
    


  • 相关阅读:
    局域网内的邮件收发
    小菜鸟入门nginx
    记一次结巴分词.net core 2.0版 nuget发布过程
    记一次 .net core publish 之后找不到视图文件的问题
    eShopOnContainer 第一步
    Ocelot网关统一查看多个微服务asp.net core项目的swagger API接口
    在Azure中创建asp.net core 应用
    微服务监控zipkin、skywalking以及日志ELK监控系列
    微服务监控zipkin+asp.net core
    Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9020824.html
Copyright © 2011-2022 走看看