0
  • 最佳答案

    刚好做过,把思路和源码发给你,说错了别介意,emm


    首先定义一个变量times,这个是时间

    按下按钮后给times设置30s倒计时,同时给自定义handler发一个消息



    handler里面使用弱引用去引用Fragment或者activity,这样能消除handler的内存泄漏



    判断what做出回应,首先把times自减一次,然后在handler内部重新发一次消息,这样handler就会一直执行下去,直到times被自减为0,还有一个重要的地方,就是发消息的时候记得延迟1000ms


    1219157891760525312  评论     打赏       Maybe
    • 拉大锯  回复 @Maybe
      看到同学们相互帮忙,我就觉得这个网站有价值了。
      拉大锯 2020-05-11 15:42   回复 1153952789488054272
    • 拉大锯  回复 @Maybe
      你甚至可以写成一篇文章。
      拉大锯 2020-05-11 15:43   回复 1153952789488054272
    • Neallu  回复 @Maybe
      万分感谢,可以了,之前不知道弱引用这个知识,谢谢
      Neallu 2020-05-11 17:27   回复 1255348622380240896
    • Maybe  回复 @拉大锯
      没自信写技术博客,哈哈哈,只写写笔记emm
      Maybe 2020-05-11 17:50   回复 1219157891760525312
    • 拉大锯  回复 @Maybe
      写笔记也不错了,后面我会动态生成面试报告,你把二维码贴到你的简历上,别人一扫码就知道你在业内的贡献了。
      拉大锯 2020-05-11 18:32   回复 1153952789488054272
    • Maybe  回复 @拉大锯
      厉害了,有空了把mysql基础总结上来,哈哈
      Maybe 2020-05-11 19:23   回复 1219157891760525312
    • 拉大锯  回复 @Maybe
      嗯,不错不错。欢迎你的同学也一起来交流。
      拉大锯 2020-05-11 19:26   回复 1153952789488054272
    • Maybe  回复 @拉大锯
      我同学不学这个,专业都不沾边,孤军奋战emm,刚才那个开源库,我导入了,按它说的写了,为啥image还是方方正正的..
      Maybe 2020-05-11 19:53   回复 1219157891760525312
    • 拉大锯  回复 @Maybe
      你没有设置圆角属性呀,你看了它的文档了吗?
      拉大锯 2020-05-11 19:57   回复 1153952789488054272
  • 1153952789488054272  评论     打赏       拉大锯
    • 实现倒计时的方式还是挺多的。你能想到的有哪些呢?自己开线程+handler?这个也可能,但是得管理起来,麻烦。


      那用CountDownTimer吧,这个也可以。


      怎么用呢?


      我随便解释一下吧。自己去写。


      构造方法有两个参数


          /**
           * @param millisInFuture The number of millis in the future from the call
           *   to {@link #start()} until the countdown is done and {@link #onFinish()}
           *   is called.
           * @param countDownInterval The interval along the way to receive
           *   {@link #onTick(long)} callbacks.
           */
          public CountDownTimer(long millisInFuture, long countDownInterval) {
              mMillisInFuture = millisInFuture;
              mCountdownInterval = countDownInterval;
          }
      



      第一个是总时长,第二个是间隔。比如说,第一个是60000,第二个是1000,那就是总时长为60秒的倒计时,间隔为1秒。


      那怎么通知你在倒计时和结束呢?


      这个是抽象类,你继承它,就得覆写这两个方法



          /**
           * Callback fired on regular interval.
           * @param millisUntilFinished The amount of time until finished.
           */
          public abstract void onTick(long millisUntilFinished);
      
      
          /**
           * Callback fired when the time is up.
           */
          public abstract void onFinish();
      


      一个是在变化,比如说60000,59000,58000....


      一个是结束,你稍微打个log就知道。



      如何开始?直接调用start方法。它的内部实现也是借助Handler。如果你要取消,调用cancel即可。


      你也可以用Timer实现倒计时。





      1153952789488054272  评论     打赏       拉大锯
      相关问题
      kissmyass · 安卓
      2019-12-11 04:41 713 2
      珂珂范范 · 安卓
      2019-12-19 00:59 559 2
      2020-01-31 00:31 693 2
      谁都不许动我的砖 · 安卓 / xml
      2020-02-05 19:16 1184 2
      谁都不许动我的砖 · 安卓
      2020-02-06 06:24 764 2
      珂珂范范 · 安卓模拟器
      2020-02-21 11:10 842 2
      珂珂范范 · 安卓
      2020-02-29 23:50 429 2
      mercenary · 安卓
      2020-03-22 02:34 358 2
      哦豁! · 安卓报错
      2020-03-22 23:17 684 4
      Pancica · 安卓
      2020-03-23 02:13 520 2
      Pancica · 安卓
      2020-03-30 08:22 452 2
      kuro · 安卓
      2020-04-04 00:17 417 4