Android中Handler实现倒计时的两种方式
背景:
最近项目中,正好做到登录/注册这个功能块。它需要通过发送验证码,在规定的时间内用验证码来完成登录/注册。之前的项目中也有这个功能,但是觉得太复杂了,只好自己重新实现一遍。用Handler来做,觉得代码简介,逻辑也清楚。
代码一:
//在向服务端发送获取验证码成功的回调函数中,开始发消息: mHandler.obtainMessage(); mHandler.sendEmptyMessage(MSG_CODE); //消息的处理: private static final int MSG_CODE = 0; private int limitTime = 121; private Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if(msg.what==MSG_CODE){ limitTime--; if(limitTime>0){ mHandler.sendEmptyMessageDelayed(MSG_CODE,1000); mBtnVerify.setText("倒计时:"+limitTime+"s"); }else{ mBtnVerify.setText("获取验证码"); } return true; } return false; } });
代码二:
//在向服务端发送获取验证码成功的回调函数中,开始发消息: mHandler.post(myRunnale); //消息的处理: private int time = 11; private Handler mHandler = new Handler(); private Runnable myRunnale = new Runnable() { @Override public void run() { time--; if(time>0){ mHandler.postDelayed(myRunnale,1000); mTvChange.setText("剩余"+time+"s"); }else{ mTvChange.setText("完毕"); } } };
从上述代码中可以看出:使用Handler.post(Runnable) 是一个发布Messgae的便利方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
java 中 ChannelHandler的用法详解
java 中 ChannelHandler的用法详解 前言: ChannelHandler处理一个I/O event或者拦截一个I/O操作,在它的ChannelPipeline中将其递交给相邻的下一个handler. 通过继承ChannelHandlerAdapter来代替 因为这个接口有许多的方法需要实现,你或许希望通过继承ChannelHandlerAdapter来代替. context对象 一个ChannelHandler和一个ChannelHandlerContext对象一起被提供.一个
-
jax-ws handler 的详解及简单实例
jax-ws handler 的详解及简单实例 aop技术一般用于某个对象的函数调用的日志,认证等. webservice是远程的函数调用,也需要类似的aop方法,举例jax-ws的webservice,handler就相当于aop. 举一例jax-ws handler例子 先写个webservice import javax.jws.HandlerChain; import javax.jws.WebMethod; import javax.jws.WebService; @WebServi
-
android handler.post和handler.sendMessage的区别和联系
现在大部分人都很熟悉handler这个东西了,我们常用handler的场景无非有两个: 1. 异步更新UI 2. 延时任务 但是我一直有一个困惑,就是handler.post(r)这个方法有什么独特的作用? 通过看源码发现,post这个方法是把任务r转成一个message放进了handler所在的线程中的messageQueue消息队列中,并且是立刻发送的消息,这样它既不是异步的也不是延时的,所以问题来了: 1. 它和sendMessage()有什么区别? 2. 它有什么独特作用呢? 下结论之前
-
Android中Handler与Message的简单实例
Android中Handler与Message的简单实例 前言: 虽然笔者已经学习了Android的AsyncTask来实现一部消息的处理.但是在android的学习中,经常会在一些demo中看到Handler与Message的一些使用,所以Handler与Message的学习也是有必要了.至于学多少,笔者还是比较坚持自己的看法,"用多少,学多少",毕竟已经有了AsyncTask如此方便的东西,Handler与Message也不是那么必不可缺了.(如此文的简单了解一下还是不需要花太多时
-
C# 中的EventHandler实例详解
废话不多说了,具体详情如下所示: //这里定义了一个水箱类 public class 水箱 { //这是水箱的放水操作 public void 放水() { } //这是水箱的属性 public double 体积; //这是水箱空的事件 public event EventHandler 水箱空; } //这里定义了一个加水器类 public class 加水器 { public void 加水(Object sender, EventArgs e) { //对需要加水的水箱进行加水操作 }
-
Android 优化Handler防止内存泄露
Android 优化Handler防止内存泄露 Demo描述: Handler可能导致的内存泄露及其优化 1 关于常见的Handler的用法但是可能导致内存泄露 2 优化方式请参考BetterHandler和BetterRunnable的实现 package cc.cc; import java.lang.ref.WeakReference; import android.os.Bundle; import android.os.Handler; import android.os.Messag
-
Android中Handler实现倒计时的两种方式
背景: 最近项目中,正好做到登录/注册这个功能块.它需要通过发送验证码,在规定的时间内用验证码来完成登录/注册.之前的项目中也有这个功能,但是觉得太复杂了,只好自己重新实现一遍.用Handler来做,觉得代码简介,逻辑也清楚. 代码一: //在向服务端发送获取验证码成功的回调函数中,开始发消息: mHandler.obtainMessage(); mHandler.sendEmptyMessage(MSG_CODE); //消息的处理: private static final int MSG_
-
Android中实现多线程操作的几种方式
目录 前言 最基础的方式 继承Thread类并实现run()方法 匿名内部类 实现Runnable接口 callable+FutureTask 线程池 手动创建线程池 使用Executors创建线程池 Android中特有的实现多线程 使用HandlerThread 使用IntentService JobIntentService/JobScheduler WorkManager WorkManager 使用协程 AsyncTask 结语 前言 多线程一直是一个老大难的问题,首先因为它难以理解,
-
Android实现底部状态栏切换的两种方式
Android开发过程中,特别是新开的项目,底部状态栏的切换使用的频率非常的高,主要的实现方式有: (1).TabLayout + Fragment (2).FragmentTabHost + Fragment (3).BottomNavigationView + Fragment (4).RidioGroup + Fragment 这里我先介绍前面两种实现方式,后面两种后期再贴出实现方式. 一.使用TabLayout + Fragment + ViewPager实现 1
-
Android解析JSON格式数据的两种方式(JSONObject和Gson)
目录 Json数据 JSONObject GSON 添加依赖 实际操作 实体类 总结 Json数据 接下来主要学习在Android中使用两种解析方式:JSONObject和Gson. JSONObject 比如我们有如下格式的Json数据: [{"id":"1","verison":"1.0","name":"shufu"}, {"id":"2",
-
ajax中data传参的两种方式分析
本文实例讲述了ajax中data传参的两种方式.分享给大家供大家参考,具体如下: 1. POST方式: /** * 订单取消 * @return {Boolean} 处理是否成功 */ function orderCancel(orderId, commant){ var flag = false; $.ajax({ type: "POST", url: "../order/orderCancel.action", //orderModifyStatus data:
-
ios 实现倒计时的两种方式
方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMethod进行倒计时的一些操作,完成时把timer给invalidate掉就ok了,代码如下: secondsCountDown = 60;//60秒倒计时 countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self se
-
android中Webview实现截屏三种方式小结
本人最近学习了android中Webview实现截屏三种方式,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. 第一种方式 通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitmap,最后用picture去绘制. //获取Picture对象 Picture picture = wv_capture.capturePicture(); //得到图片的宽和高(没有reflec
-
Vue-Cli 3.0 中配置高德地图的两种方式
vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存在些问题,所以就放弃了,可能是我的使用方式不对.我所遇到的问题: 1. 安装之后使用,始终提示跨域问题. 2. 页面刷新之后地图出不来,第一次进入页面时没问题.因为这两个问题所以放弃了这个组件的使用.我想可能是我哪个地方代码有问题. 二.直接引用高德地图 SDK 因为第一种方式尝试失败了,所以我选择
-
Vue中引入svg图标的两种方式
Vue中引入svg图标的方式 Vue中引入svg图标的方式一 安装 yarn add svg-sprite-loader --dev svg组件 index.vue <!-- svg组件 --> <template> <svg class="svg-icon" :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName&quo
-
详细总结IDEA中打jar包的两种方式
一.前言 在讲这两种方式之前,我们先来说明一下什么是java中的jar文件 jar (Java Archive File),翻译过来就是java的档案文件,它其实也类似于我们windows下的zip文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息.主类的全类名等信息. 二.不使用Maven直接打Jar包 1.File -->Project Structure -->
随机推荐
- JQuery中attr属性和jQuery.data()学习笔记【必看】
- bootstrap table服务端实现分页效果
- js 利用image对象实现图片的预加载提高访问速度
- CentOS6.2上安装Oracle10g报ins_emdb.mk错误处理方法
- ASP.NET MVC生成静态页面的方法
- javascript删除元素节点removeChild()用法实例
- css图片切换效果代码[不用js]
- 关于ASP.NET中TreeView用法的一个小例子
- Python探索之实现一个简单的HTTP服务器
- 详细介绍基于MySQL的搜索引擎MySQL-Fullltext
- js金额数字格式化实现代码(加减逗号处理)
- 如何理解jQuery中的ajaxSubmit方法
- javascript 日期联动选择器 [其中的一些代码值得学习]
- javascript中对对层的控制
- Linux系统下ssh的相关配置详细解析
- ImageView简单加载网络图片实例代码
- PHP 网页过期时间的控制代码
- 使用python提取html文件中的特定数据的实现代码
- Android网络编程之UDP通信模型实例
- 爱易网络为您提供10M免费ASP空间服务