Android实现计时与倒计时的方法汇总

方法一

Timer与TimerTask(Java实现)

public class timerTask extends Activity{
 private int recLen = 11;
 private TextView txtView;
 Timer timer = new Timer();
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timertask);
  txtView = (TextView)findViewById(R.id.txttime);
  timer.schedule(task, 1000, 1000);  // timeTask
 }
 TimerTask task = new TimerTask() {
  @Override
  public void run() {
   runOnUiThread(new Runnable() {  // UI thread
    @Override
    public void run() {
     recLen--;
     txtView.setText(""+recLen);
     if(recLen < 0){
      timer.cancel();
      txtView.setVisibility(View.GONE);
     }
    }
   });
  }
 };
} 

方法二

TimerTask与Handler(不用Timer的改进型)

public class timerTask extends Activity{
 private int recLen = 11;
 private TextView txtView;
 Timer timer = new Timer();
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timertask);
  txtView = (TextView)findViewById(R.id.txttime);
  timer.schedule(task, 1000, 1000);  // timeTask
 }
 final Handler handler = new Handler(){
  @Override
  public void handleMessage(Message msg){
   switch (msg.what) {
   case 1:
    txtView.setText(""+recLen);
    if(recLen < 0){
     timer.cancel();
     txtView.setVisibility(View.GONE);
    }
   }
  }
 };
 TimerTask task = new TimerTask() {
  @Override
  public void run() {
   recLen--;
   Message message = new Message();
   message.what = 1;
   handler.sendMessage(message);
  }
 };
} 

方法三

Handler与Message(不用TimerTask)

public class timerTask extends Activity{
 private int recLen = 11;
 private TextView txtView;
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timertask);
  txtView = (TextView)findViewById(R.id.txttime);
  Message message = handler.obtainMessage(1);  // Message
  handler.sendMessageDelayed(message, 1000);
 }
 final Handler handler = new Handler(){
  public void handleMessage(Message msg){   // handle message
   switch (msg.what) {
   case 1:
    recLen--;
    txtView.setText("" + recLen);
    if(recLen > 0){
     Message message = handler.obtainMessage(1);
     handler.sendMessageDelayed(message, 1000);  // send message
    }else{
     txtView.setVisibility(View.GONE);
    }
   }
   super.handleMessage(msg);
  }
 };
} 

方法四

Handler与Thread(不占用UI线程)

public class timerTask extends Activity{
 private int recLen = 0;
 private TextView txtView;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timertask);
  txtView = (TextView)findViewById(R.id.txttime);
  new Thread(new MyThread()).start();   // start thread
 }
 final Handler handler = new Handler(){   // handle
  public void handleMessage(Message msg){
   switch (msg.what) {
   case 1:
    recLen++;
    txtView.setText("" + recLen);
   }
   super.handleMessage(msg);
  }
 };
 public class MyThread implements Runnable{  // thread
  @Override
  public void run(){
   while(true){
    try{
     Thread.sleep(1000);  // sleep 1000ms
     Message message = new Message();
     message.what = 1;
     handler.sendMessage(message);
    }catch (Exception e) {
    } 

方法五

Handler与Runnable(最简单型)

public class timerTask extends Activity{
 private int recLen = 0;
 private TextView txtView;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timertask);
  txtView = (TextView)findViewById(R.id.txttime);
  handler.postDelayed(runnable, 1000);
 }
 Handler handler = new Handler();
 Runnable runnable = new Runnable() {
  @Override
  public void run() {
   recLen++;
   txtView.setText("" + recLen);
   handler.postDelayed(this, 1000);
  }
 };
} 

计时与倒计时

方法1,方法2和方法3,都是倒计时

方法4,方法5,都是计时

计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较

方法1,方法2和方法3,都是在UI线程实现的计时;

方法4和方法5,是另开Runnable线程实现计时

实现方式比较

方法1,采用的是Java实现,即Timer和TimerTask方式;

其它四种方法,都采用了Handler消息处理

推荐使用

如果对UI线程交互要求不很高,可以选择方法2和方法3

如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理

方法5,综合了前几种方法的优点,是最简的

以上所述是小编给大家介绍的Android实现计时与倒计时的方法汇总值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • android实现倒计时功能代码

    效果图,每隔1秒,变换一下时间  xml: 复制代码 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="mat

  • Android 实现闪屏页和右上角的倒计时跳转实例代码

    以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 全屏主题的意思. 给大家展示下效果图: 代码如下所示: package

  • Android开发之获取短信验证码后按钮背景变化并且出现倒计时

    目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变化并且出现倒计时,当倒计时结束后,如果你没有获取到验证码,可以再次点击. 代码如下所示: VerCodeTimer mVerCodeTimer=(Button) findViewById(R.id.login_get_ver_code); private class VerCodeTimer extends CountDownTimer

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android账号注册实现点击获取验证码倒计时效果

    网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果,如何实现这个效果,具体内容如下 效果图:   代码: RegisterActivity.java import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.jialianjia.bzw.BaseAct

  • Android实现计时与倒计时的常用方法小结

    本文实例总结了Android实现计时与倒计时的常用方法.分享给大家供大家参考,具体如下: 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState){ super.onC

  • Android实现加载广告图片和倒计时的开屏布局

    这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局.程序中设置的LayoutParams,划分额外空间比例为6分之5,具体权重比例可根据用户自己需求来自定义,异步加载广告图片,相关的Android代码. 具体实现代码如下: package cn.waps.extend; import android.app.Activity; import android.content.Context; import android.content.res.Configuration;

  • Android实现计时与倒计时的方法汇总

    方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.l

  • Android Studio 引入 aidl 文件的方法汇总

    AndroidStudio 引入 aidl 文件,一般来说,有两种方法. 第一种方法 直接在 src/main 目录下新建 aidl 文件夹,并将我们的 aidl 文件放到该目录下.因为 AndroidStudio 默认的 aidl 文件默认配置是这样的. 第二种方法 把 adil 文件拷贝到libs文件夹下在build.gradle文件中配置 sourceSets { main { jniLibs.srcDirs = ['libs'] aidl.srcDirs = ['src/main/jav

  • Android计时与倒计时实现限时抢购的5种方法

    在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通用,但后来考虑在安卓中是否有更佳的方案,于是乎共找到以下五种实现方案,另外还有一种使用CountDownTimer进行计时的方面,我会在单独的文章中进行介绍 效果如图: 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{

  • Android开发实现图片圆角的方法

    本文讲述了Android开发实现图片圆角的方法.分享给大家供大家参考,具体如下: Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight(); Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); Canvas canvas =

  • Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何对其进行管理. 先介绍一下Android系统对手势的管理,Android系统允许应用程序把用户的手势以文件的形式保存以前,以后要使用这些手势只需要加载这个手势库文件即可,同时Android系统还提供了诸如手势识别.查找及删除等的函数接口,具体如下: 一.加载手势库文件: staticGestureL

  • Android基于SoftReference缓存图片的方法

    本文实例讲述了Android基于SoftReference缓存图片的方法.分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用.如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以被程序使用.软引用可用来实现内存敏感的高速缓存.使用软引用能防止内存泄露,增强程序的健壮性. SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃

  • Android编程实现TCP客户端的方法

    本文实例讲述了Android编程实现TCP客户端的方法.分享给大家供大家参考,具体如下: 因为项目上需要实现一个TCP Client 端:在网上找好多例子基本上都是阻塞方式完成: 我的实现例子:由Activity 及sever 来实现,在sever 创建一个线程来监听接受数据.收到数据,通过广播发送给Activity; 服务端我没有去实现,你可以下载TCP Socket 调试工具v2.2:创建个9005端口:客户端:访问的IP为10.0.2.2 AnetTest.java: /** * Copy

  • Android编程实现启动界面的方法分析

    本文实例讲述了Android编程实现启动界面的方法.分享给大家供大家参考,具体如下: 最近在弄一个程序启动界面程序,在这里贴下代码.解释一下:后面Intent(qidong.this,"写想要跳转的Activity"); 效果图: 然后建立一个名字为qidon. Activity: import Android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os

  • Android简单创建一个Activity的方法

    本文实例讲述了Android简单创建一个Activity的方法.分享给大家供大家参考,具体如下: 1) 创建一个android项目 填写项目信息 2) 创建一个新Activity 右键点击Eclipse左边(默认)你要加入Activity的包,比如,我的包是com.INdroid.layout.然后选New->Class,输入类名后(注意首字母大写),在Superclass的Browse那里点击.最后在Choose a type那里输入Activity.然后点OK就可以了 3) 创建Activi

随机推荐