文档章节

Android计时与倒计时

CrazyManDF
 CrazyManDF
发布于 2016/08/02 10:00
字数 635
阅读 10
收藏 0

方法一

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程序设计有所帮助。

本文转载自:http://www.jb51.net/article/74092.htm

共有 人打赏支持
CrazyManDF
粉丝 3
博文 76
码字总数 28526
作品 0
程序员
Chronometer和CountDownTimer计时器

Android小知识10则(上) Android小知识10则(下) Android用5种方式实现自定义计时器, 哪种才是你的菜? github传送门 目录 前言 Chronometer的使用 CountDownTimer的使用 最后 前言 mTimer.set...

Sorrower丶
08/14
0
0
Android中的倒计时器设计实现 00:00:00格式

功能: 倒计时 类:MainActivity(主类) MyCount(实现倒计时功能的类) AdvancedCountdownTimer(消息机制的抽象类) 代码如下: package com.example.daojishiqi; import android.os.Bund...

zwyandroid
05/25
0
0
Android控件之Chronometer(定时器)

Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始。默认情况下它会显示在当前定时器的值的形式“分:秒”或...

冯京宝
2012/08/29
0
0
Android Timer计时器详解

直接上代码,解释看注释,一个火箭发射倒计时的例子 main.xml [html] <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ......

yumingxinli
2013/03/08
0
1
Android 倒计时工具CountDownTimer的使用

一、用法详解 在Android开发中,有时需要使用倒计时功能,在Android系统中提供了一个倒计时的抽象类来辅助倒计时行为。 这个类有点缺陷,就是不能暂停后再次接着继续使用,为此,需要自定义一...

IamOkay
2014/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
2
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
5
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部