文档章节

Android计时与倒计时

CrazyManDF
 CrazyManDF
发布于 2016/08/02 10:00
字数 635
阅读 11
收藏 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

共有 人打赏支持
下一篇: Android测试
CrazyManDF
粉丝 3
博文 78
码字总数 30987
作品 0
程序员
私信 提问
Chronometer和CountDownTimer计时器

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

Sorrower丶
08/14
0
0
Android实现计时与倒计时(限时抢购)的几种方法

在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在最近的一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法...

长平狐
2012/09/03
549
0
Android实现计时与倒计时的几种方法

方法一 Timer与TimerTask(Java实现) 方法二 TimerTask与Handler(不用Timer的改进型) 方法三 Handler与Message(不用TimerTask) 方法四 Handler与Thread(不占用UI线程) 方法五 Handle...

长平狐
2013/01/06
61
0
Google Android O 发布倒数计时 以日全食为主题

Android O 正式版将在 8 月 21 日推出,Google 推出了一个以这次日食为主题的倒计时网站。 该网站还提供了一些方便的日食跟踪工具,包括一个可爱的动画,显示用户所在地日食的位置。Google ...

局长
2017/08/19
960
6
Android中的倒计时器设计实现 00:00:00格式

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

zwyandroid
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

slot分发内容

slot元素作为组件模板之中的内容分发插槽。这个元素自身将被替换。 有 name 特性的 slot 称为具名 slot。 有 slot 特性的内容将分发到名字相匹配的具名 slot。 内容分发就是指混合父组件的内...

Carbenson
10分钟前
1
0
python开发入门

1.执行python文件 # python ./demo.py 2.Python ImportError: No module named 'requests'异常 解决方法: # pip install requests;...

硅谷课堂
11分钟前
1
0
官宣,PyTorch 1.0 稳定版本现已推出

简评:快来一起快乐地学习吧。 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版。研究人员和工程师现...

极光推送
24分钟前
1
0
对比理解adr,ldr指令

很多人在写简单的裸机代码或分析uboot时,常常遇到adr ldr指令。却分不清这2者的区别,今天就来谈谈adr与ldr指令。 参照韦老师的代码和Makefile写了test_adr.S: .text .globl _start _start...

天王盖地虎626
35分钟前
2
0
将spring boot 项目注册为Linux的服务

springboot 注册为Linux系统服务 springboot 注册为Linux系统服务

miaojiangmin
37分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部