国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

Android CountDownTimer案例總結

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

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

二、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();

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

四、使用注意

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

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

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

    我們看CountDownTimer的源碼可以看到,在執(zhí)行onTick的方法時,google源碼里面減去了程序執(zhí)行到這里的時候所消耗的時間,這里可以看出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關閉而倒計時還未結束的時候,會在后臺一直執(zhí)行,而很多時候我們用倒計時會有更新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; }//這是倒計時執(zhí)行方法 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內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 亚洲成人在线免费视频 | 女人一级特纯黄大片色 | 亚洲在线观看 | 一 级 黄 色 片生活片 | 午夜在线伦理福利视频 | 成年免费大片黄在线观看一 | 九九热爱视频精品视频高清 | 好吊妞998视频免费观看在线 | 欧美成人网7777视频 | 亚洲男人天堂2018 | 亚洲精品一区91 | 加勒比heyzo| 在线播放免费播放av片 | 国产精品亚欧美一区二区三区 | 粉嫩高中生的第一次在线观看 | 一级做a爰片久久毛片欧美 一级做a爰片久久毛片人呢 | 亚洲人在线播放 | 久久精品久久精品国产大片 | 欧美日韩另类在线观看视频 | 九九在线观看视频 | 国产精品毛片天天看片 | 亚洲国产亚洲片在线观看播放 | 亚洲欧美日韩国产精品26u | 欧美成人精品福利在线视频 | 99亚洲自拍 | 日韩一区二区不卡中文字幕 | 成人精品亚洲人成在线 | 久久久综合结合狠狠狠97色 | 一个人看的www日本视频 | 亚洲精品综合一二三区在线 | 亚洲精品国产第一区二区三区 | 色综合亚洲七七久久桃花影院 | 国产亚洲精品一区二区三区 | α片毛片 | 三级网站免费 | 成人午夜性a一级毛片美女 成人午夜亚洲影视在线观看 | 在线成人免费看大片 | 国产成人一区二区三区影院免费 | 韩国美女豪爽一级毛片 | 99re7在线精品免费视频 | 欧美激情精品久久久久久久九九九 |