项目中用绑定手机号功能,发送之后2分钟倒计时。
倒计时的功能用到了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

更多相关文章

  1. Android执行shell命令
  2. 今天在网上看到了Google的GPhone的消息,学习学习android先。
  3. Android(安卓)控件之DatePicker,TimePicker,Calender
  4. Android(安卓)开发中遇到的 bug(5)
  5. Android之SQLite存取DATETIME类型
  6. Android(安卓)achartengine统计图
  7. Android(安卓)SharedPreferences 实现原理
  8. android工具之TraceView学习笔记
  9. Android(安卓)Retrofit 源码系列(一)~ 原理剖析

随机推荐

  1. 在jQuery datetimepicker中禁用特定时间
  2. 桌面视图中的SlikNav多级菜单?
  3. 显示json数组中的所有项目
  4. 图表。js数据数组使用PHP, MySQL。如何从
  5. Regexp exec列表的url由昏迷“,*”分隔
  6. JavaScript 最佳实践:帮你提升代码质量
  7. Vue js v-bind不工作?
  8. 如何在WebBrowser控件中注入Javascript ?
  9. 探讨FantasySoft遇到的有关Javascript的
  10. javascript数组和对象是否有设置顺序?