文档章节

Android计时与倒计时

CrazyManDF
 CrazyManDF
发布于 2016/08/02 10:00
字数 635
阅读 10
收藏 0
点赞 0
评论 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
博文 73
码字总数 25546
作品 0
程序员
Android中的倒计时器设计实现 00:00:00格式

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

zwyandroid ⋅ 05/25 ⋅ 0

聊聊 CountDownTimer 使用过程中的注意事项

Android 实现倒计时的方式有多种,Handler 延时发送 Message,Timer 和 TimerTask 配合使用,使用 CountDownTimer 类等。相比而言,经过系统封装的 CountDownTimer 算是使用起来最为方便的方...

亦枫 ⋅ 2017/09/28 ⋅ 0

Android实现计时与倒计时的几种方法

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

长平狐 ⋅ 2013/01/06 ⋅ 0

Android使用Timer编写倒计时程序

开篇大家可以先看看Timer的基础用法,以及简单的原理。http://my.oschina.net/zhengweishan/blog/493891 Java之Timer使用。这里我要说的是Android使用Timer编写一个倒计时程序。 需求:实现简...

火龙战士 ⋅ 2015/08/28 ⋅ 0

拖延症患者的Android开发笔记 - 计时器 widget

一 需求分析1)需求来源与操作分析与技术分析Android自带的时钟应用操作非常不人性化,对于常用倒计时和计时的小伙伴简直就是摧残。所以我打算做一个操作非常简单的倒计时widget。操作上类似...

在别处的老张头 ⋅ 2015/03/17 ⋅ 0

Android手机令牌教程

Android手机令牌教程 "沉下心,你不再是小孩子了.多看书,学做人"-JeffLi告诉自己 Written In The Font 花了一个天一夜,搞了这个小东西-安卓手机令牌.其实,我这边分享,看网上东西也没多少.这就...

泥沙砖瓦浆木匠 ⋅ 2014/06/13 ⋅ 0

Android实现计时与倒计时的几种方法

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

鉴客 ⋅ 2012/03/09 ⋅ 0

Android实现计时与倒计时的几种方法

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

晨曦之光 ⋅ 2012/03/01 ⋅ 0

Android实现计时与倒计时(限时抢购)的几种方法

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

长平狐 ⋅ 2012/09/03 ⋅ 0

android悬浮窗、收款二维码、相机处理、事件通知库、NFC读取等源码

Android精选源码 一个漂亮而强大的自定义view SeekBar(http://www.apkbus.com/thread-598080-1-1.html) 适用于Android的简单NFC读取源码(http://www.apkbus.com/thread-598082-1-1.html) 安卓......

逆鳞龙 ⋅ 04/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

线程池

一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 二、线程池的体系结构: java.util.concurrent.Executor : 负责线程的使用...

stars永恒 ⋅ 16分钟前 ⋅ 0

你值5K还是15K?实战案例,测测你的分析功力

本文源自陈老师遇到的真实案例。 老板说:“我们今年准备参加展会,做一年。以前我没参加过,没关系,这里有一份展会数据,你回去分析下哪些有价值,后边组织的时候有个指导”。现在你收到任...

加米谷大数据 ⋅ 18分钟前 ⋅ 0

中文转英文功能

package com.sysware.task.util;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.for......

AK灬 ⋅ 19分钟前 ⋅ 0

JNI Java层类关联C/C++层的类

Android开发时,因为要实现某某功能,需要集成算法公司的算法库(so库),这就需要自己编写JNI。 通常这些库提供的接口可以概况成1、初始化 2、算法处理 3、释放 4、打印版本号 初始化后会返...

国仔饼 ⋅ 22分钟前 ⋅ 0

maven下载jar包改为阿里云的maven库

一:修改maven安装路径中conf文件夹下的setting.xml文件 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/......

夜醒者 ⋅ 23分钟前 ⋅ 0

电商用户行为分析大数据平台相关系列10-基础数据结构分析

电商用户行为分析大数据平台相关系列1-环境介绍 电商用户行为分析大数据平台相关系列2-HADOOP环境搭建 电商用户行为分析大数据平台相关系列3-HIVE安装 电商用户行为分析大数据平台相关系列4...

xiaomin0322 ⋅ 24分钟前 ⋅ 0

使用readLine()方法遇到的坑

下午玩 TCP/IP 的 Socket 通信时,使用 BufferedReader 的 readLine() 遇到了一个坑,现在终于解决了,特此记录下来。 程序很简单,客户段从控制台读取用户输入,然后发送至服务器端,主要代...

孟飞阳 ⋅ 24分钟前 ⋅ 0

基于Hadoop集群的Hive安装配置(Derby数据库)

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行(具体的Hive架构大家自行搜索)。接下来主要讲下Hadoop集群下...

海岸线的曙光 ⋅ 25分钟前 ⋅ 0

CoreOS裸机iso安装和相关配置

裸机通过iso安装CoreOS,个人趟了很多坑,以下就是完整的从零开始部署和配置的过程,希望对大家有用。 一、安装CoreOS到硬盘 1. 准备Live iso镜像,制作好usb启动盘 Live iso下载地址 2. 搭建...

ykbj ⋅ 30分钟前 ⋅ 0

jquery控制表格锁列(转)

表格已经完成后新加的需求,要实现锁表格的第一列。很多带这种效果的都是js封装的框架或者具体某种框架的组件,不适用解决当前问题。作为后端开发又实在不熟样式,搜到了一个可以用的,虽然样...

刘昌鑫 ⋅ 32分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部