Android demo倒计时原理(CountDownTimer原理)
16lz
2021-01-23
项目中用绑定手机号功能,发送之后2分钟倒计时。
倒计时的功能用到了CountDownTimer类,这是android的一个工具类。很巧妙
demo地址:http://download.csdn.net/detail/pangzaifei/7006651
倒计时的功能用到了CountDownTimer类,这是android的一个工具类。很巧妙
下面是这个类的原理解析,此类比较简单。但很强大。
package com.example.democountdowntheory;import android.os.Handler;import android.os.Message;import android.os.SystemClock;public abstract class MyCountDownTimer {/*原理: * 随时用SystemClock.elapsedRealtime()获取时间,使用这个时间来精确倒计时的数值 * 其他比较简单看看就明白了 * */private static final int MSG = 1;private long mSetTotalTime;// 总的时间120000,120秒private long mSetDownValue;// 减少的值1000,1秒public MyCountDownTimer(long totalTime, long downValue) {this.mSetTotalTime = totalTime;this.mSetDownValue = downValue;}/** * 启动 */public final synchronized MyCountDownTimer start() {if (mSetTotalTime <= 0) {onFinish();return this;}mStartTime = SystemClock.elapsedRealtime() + mSetTotalTime;// 开始的时间+开机到现在的时间mHandler.sendMessage(mHandler.obtainMessage(MSG));return this;};/** * 变化的值 */public abstract void onTick(long remain);public void cancel() {mHandler.removeMessages(MSG);}/** * 结束之后 */public abstract void onFinish();private Handler mHandler = new Handler() {public void handleMessage(Message msg) {synchronized (MyCountDownTimer.this) {long remain = mStartTime - SystemClock.elapsedRealtime();// 减少后,剩余的时间。if (remain <= 0) {onFinish();// 完成} else if (mSetTotalTime < mSetDownValue) {// 设置的值<down减少的值sendMessageDelayed(obtainMessage(MSG), remain);} else {// 减少操作long pre = SystemClock.elapsedRealtime();onTick(remain);// 将值回调,供用户使用long delay = pre + mSetDownValue- SystemClock.elapsedRealtime();while (delay < 0) {delay += mSetDownValue;}sendMessageDelayed(obtainMessage(MSG), delay);}}};};private long mStartTime;}
demo地址:http://download.csdn.net/detail/pangzaifei/7006651
更多相关文章
- Android实现发送短信功能实例详解
- Android中拍照、图片、录音、视频和音频功能的方法和代码
- Android 复制和粘贴功能
- android版本更新功能
- android进行录音功能并保存播放
- Android第五个功能:文件存储到SDCard上面
- Android亮灭屏功能实现
- android模仿铃声选择功能
- 利用第三方jar包jaudiotagger实现与MediaMetadataRetriever类似