日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android CountDownTimer案例總結

瀏覽:27日期:2023-12-10 15:37:33
目錄一、概述二、API三、基本使用方法四、使用注意一、概述

項目中經常用到倒計時的功能,比如說限時搶購,手機獲取驗證碼等等。而google官方也幫我們封裝好了一個類:CountDownTimer,使我們的開發更加方便;

二、API

CountDownTimer是一個抽象類,有兩個抽象方法,它的API很簡單

public abstract void onTick(long millisUntilFinished);//這個是每次間隔指定時間的回調,millisUntilFinished:剩余的時間,單位毫秒public abstract void onFinish();//這個是倒計時結束的回調

使用的時候只需要

new CountDownTimer(long millisInFuture, long countDownInterval)

//millisInFuture:倒計時的總時長

//countDownInterval:每次的間隔時間 單位都是毫秒三、基本使用方法

我們以短信驗證碼的倒計時來看,點擊獲取驗證碼,倒計時60s不可點擊

new CountDownTimer(60 * 1000, 1000) { @Override public void onFinish() {if (tvCode != null) { tvCode.setText('重新獲取'); tvCodeWr.setTextColor(Color.parseColor('#E94715')); tvCode.setClickable(true); tvCode.setEnabled(true);}cancel(); } @Override public void onTick(long millisUntilFinished) {if (tvCode != null) { tvCode.setClickable(false); tvCode.setEnabled(false); tvCode.setText(millisUntilFinished / 1000 + 's'); tvCode.setTextColor(Color.parseColor('#999999'));} }}.start();

點擊按鈕,獲取驗證碼成功之后就可以執行以上操作,最后一定要start,不然不會執行

四、使用注意

CountDownTimer使用很簡單,但是坑很多,需要注意避免踩坑。

1、空指針:如果在activity或者fragment關閉銷毀的時候沒有調用cancle方法,它的onTick方法還是會繼續執行,這個時候UI控件都為空,不注意判斷的話很容易空指針

2、時間不是太準的問題:

    我們看CountDownTimer的源碼可以看到,在執行onTick的方法時,google源碼里面減去了程序執行到這里的時候所消耗的時間,這里可以看出google代碼的嚴謹

final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();if (millisLeft <= 0) { onFinish();} else if (millisLeft < mCountdownInterval) { // no tick, just delay until done sendMessageDelayed(obtainMessage(MSG), millisLeft);}

所以一開始倒計時的時間是59,這里可以在構造方法里面稍微加一點時間就可以解決如:

new CountDownTimer(60 * 1000+300, 1000)

3、內存泄漏問題

    首先我們來看源碼,核心代碼如下

private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) {synchronized (CountDownTimer.this) { if (mCancelled) {return; } final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime(); if (millisLeft <= 0) {onFinish(); } else if (millisLeft < mCountdownInterval) {// no tick, just delay until donesendMessageDelayed(obtainMessage(MSG), millisLeft); } else {long lastTickStart = SystemClock.elapsedRealtime();onTick(millisLeft);// take into account user’s onTick taking time to executelong delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();// special case: user’s onTick took more than interval to// complete, skip to next intervalwhile (delay < 0) delay += mCountdownInterval;sendMessageDelayed(obtainMessage(MSG), delay); }} }};

可以看到CountDownTimer的原理還是用到了Handler,所以很容易造成內存泄漏問題,當Activity或者Fragment關閉而倒計時還未結束的時候,會在后臺一直執行,而很多時候我們用倒計時會有更新UI的操作,而控件都持有activity的引用,長期得不到釋放的話就會造成內存泄漏,甚至會造成1所說的空指針問題,所以一般要在activity或fragment銷毀的時候調用cancle方法。

我自己把這個進行了封裝,寫成了一個工具類以供參考:

public class TimeUtils { private String color;//這里可以修改文字顏色 WeakReference<TextView> tvCodeWr;//控件軟引用,防止內存泄漏 private CountDownTimer timer; public TimeUtils(TextView tvCode, String color) {super();this.tvCodeWr = new WeakReference(tvCode);this.color = color; }//這是倒計時執行方法 public void RunTimer() {timer = new CountDownTimer(60 * 1000 - 1, 1000) { @Override public void onFinish() {if (tvCodeWr.get() != null) { tvCodeWr.get().setText('重新獲取'); tvCodeWr.get().setTextColor(Color.parseColor(color)); tvCodeWr.get().setClickable(true); tvCodeWr.get().setEnabled(true);}cancel(); } @Override public void onTick(long millisUntilFinished) {if (tvCodeWr.get() != null) { tvCodeWr.get().setClickable(false); tvCodeWr.get().setEnabled(false); tvCodeWr.get().setText(millisUntilFinished / 1000 + 's'); tvCodeWr.get().setTextColor(Color.parseColor('#999999'));} }}.start(); }//這個方法可以在activity或者fragment銷毀的時候調用,防止內存泄漏 public void cancle() {if (timer != null) { timer.cancel(); timer = null;} }}

到此這篇關于Android CountDownTimer案例總結的文章就介紹到這了,更多相關Android CountDownTimer內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
av一区在线| 亚洲精品国产偷自在线观看| 日韩精品麻豆| 美女视频黄 久久| 成人精品高清在线视频| 成人在线视频免费看| 日韩欧美国产精品综合嫩v| 精品91福利视频| 日韩在线欧美| 99久久激情| 尤物精品在线| 亚洲香蕉久久| 99国产一区| 三级久久三级久久久| 国产精品视频一区二区三区| 国产精品一区亚洲| 精品国产午夜肉伦伦影院| 欧美成人基地| 丝瓜av网站精品一区二区| 日韩精品一级二级 | 国产黄大片在线观看| 日韩大片免费观看| 快she精品国产999| 久久av电影| 国内不卡的一区二区三区中文字幕| 日韩免费小视频| 免费美女久久99| 精品色999| 亚洲欧美久久久| 国产精品一区二区三区av| 日本精品影院| 亚欧洲精品视频在线观看| 精品中文在线| 蜜桃伊人久久| 成人在线视频免费看| 自拍日韩欧美| 国产精品日本一区二区三区在线| 手机在线电影一区| 91精品蜜臀一区二区三区在线 | 另类综合日韩欧美亚洲| 国产在线欧美| 国产精品免费不| 日韩午夜电影| 久久99高清| 亚洲区国产区| 99精品一区| 精品三级国产| 日本免费在线视频不卡一不卡二| 九九精品调教| 亚洲毛片在线| 久久国产影院| 欧美激情在线精品一区二区三区| 国产精品日韩| 欧美成人基地| 精品国产乱码久久久| 中文字幕一区二区三区日韩精品| 色黄视频在线观看| 国产精品最新| 最新亚洲国产| 不卡中文字幕| 久久久久久网| 国产精品欧美三级在线观看| 亚洲综合欧美| 成人久久久久| 国产欧美日韩综合一区在线播放| 91成人精品| 日本欧美不卡| 激情久久一区二区| 国产日韩欧美一区在线| 亚洲一区二区日韩| 欧美网站在线| 国产精品99免费看| av高清一区| 中文在线а√在线8| 欧美国产视频| 国产精品久久久久久模特| 亚州精品视频| 蜜桃视频免费观看一区| 伊人精品视频| 欧美国产91| 久久在线电影| 久久精品1区| 国产v综合v| av资源亚洲| 欧美激情国产在线| 国产精品免费不| 日韩精品五月天| 一区二区电影| 一区二区三区国产盗摄| 午夜久久影院| 欧美日韩中文字幕一区二区三区| 国产精品videossex久久发布| 综合欧美亚洲| 热久久国产精品| 欧美日韩va| 日韩国产精品久久久| 一二三区精品| 老牛影视一区二区三区| 一区二区高清| 日韩**一区毛片| 日韩中文字幕一区二区高清99| 亚洲影院天堂中文av色| 中文字幕亚洲精品乱码| 日韩高清在线不卡| 国产精品毛片视频| 欧美激情精品| 正在播放日韩精品| 亚洲精品永久免费视频| 日本韩国欧美超级黄在线观看| 国产精品日韩精品在线播放 | 一区三区视频| 99成人在线| 中文字幕成人| 97精品资源在线观看| 在线观看一区| 国产日韩一区二区三区在线 | 综合五月婷婷| 91综合久久爱com| 亚洲日本免费电影| 亚洲精品系列| 日韩欧美精品一区二区综合视频| 噜噜噜躁狠狠躁狠狠精品视频| 99热精品久久| 在线看片不卡| 日韩中文av| 国产精品亚洲欧美| 国产精品极品| 麻豆极品一区二区三区| 欧美日韩一二| 91成人精品观看| 国产精品美女在线观看直播| 欧美精品1区| 日韩精品一区二区三区免费观看| 老牛影视精品| 巨乳诱惑日韩免费av| 欧美国产极品| 婷婷精品进入| 中文字幕一区二区三区在线视频| 国产精品尤物| 国产一区久久| 国产精品一区高清| 蜜桃tv一区二区三区| 亚洲精品中文字幕99999| 福利精品在线| 亚洲日本欧美| 91精品xxx在线观看| 日韩精品导航| 国产综合婷婷| 国产亚洲精品精品国产亚洲综合| 成人午夜精品| 欧美日韩中出| 樱桃成人精品视频在线播放| 麻豆成人综合网| 亚洲一区久久| 高清一区二区三区av| 综合激情网站| 久久高清免费| 国产一区二区三区久久| 中文字幕日本一区| 群体交乱之放荡娇妻一区二区| 亚洲欧洲av| 久久亚洲专区| 精品三级在线观看视频| 欧美中文字幕| 国产精品黑丝在线播放| 日韩精品成人在线观看| 日韩午夜高潮| 91精品亚洲| 日韩av片子| 91亚洲精品视频在线观看| 一区在线视频观看| 亚洲啊v在线| 国产精品国码视频| 一本综合精品| 99国产精品| 久久亚洲国产| 国产精品伦理久久久久久| 日韩精选在线| 国产亚洲一级| 久久精品av| 91精品韩国| 国产传媒在线观看| 欧美aa在线视频| 欧美亚洲综合视频| 在线精品亚洲| 国产精品外国| 五月天激情综合网| 丝袜美腿一区| 在线精品亚洲欧美日韩国产| 麻豆久久一区二区| 国产日韩中文在线中文字幕| 亚洲毛片在线| 免费黄网站欧美| 欧美不卡高清| 国产伊人精品| 91精品国产乱码久久久久久久 | 91精品啪在线观看国产18| 成人污污视频| 美女国产精品久久久| 三级久久三级久久久|