方法一

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倒计时像音乐,Android实现倒计时的几种方式相关推荐

  1. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  2. Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式

    Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式 actionNone : 回车键,按下后光标到下一行 actionGo : Go, actionSearch : 放大镜 a ...

  3. android布局密码,Android中EditText显示明文与密码的两种方式

    效果图如下所述: 布局 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h ...

  4. android播放资源音乐,android音乐播放器_专辑列表

    专辑列表就是显示歌曲所属的专辑,也是用ListView来显示,同样也需要定义一个Adapter. 一.Activity [java] /** * */ package com.android.musi ...

  5. Android App监听软键盘按键的三种方式(转)

    最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...

  6. Android App监听软键盘按键的三种方式

    前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...

  7. android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

    前段时间项目中有个需求是要求只能输入汉字,并且不能输入偏旁部首,于是总结了下EditText限制输入的几种方式,但是对于语音输入的还没找到好的解决方案: 通过设置EditText的inputType来 ...

  8. linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

    本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助. [RK3288][Android6.0]   耳机插拔处理 ...

  9. 【Xamarin开发 Android 系列 2】VS2015跨平台开发的几种方式

    在微软Build大会上,微软宣布在VS2015中支持三种方式进行跨平台的开发. 1. Xamarin 2. Cordova 3. C++ Xamarin  官网 :http://xamarin.com ...

  10. android mysql储存动态数据_Android数据存储五种方式总结

    本文介绍Android平台进行数据存储的五大方式,分别如下: 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单 ...

最新文章

  1. 一篇文章让你了解智能合约以及和区块链的关系
  2. 中国最懂自动驾驶量产公司秀肌肉:自动驾驶算力怪兽、百亿参数云端超大模型、百万公里路测里程...
  3. 从各方面数据来看《猎场》为什么收官后热度依旧
  4. php中url重写,使用PHP重写URL
  5. 分段线性插值Python实现(同时估计误差)
  6. python链家网高并发异步爬虫and异步存入数据
  7. 加密安装Kli Linux
  8. SpringMvc整合Quartz实现定时任务项目源码
  9. 跨浏览器检测某个节点是不是另一个节点的后代
  10. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
  11. 开源项目的所有者去世了怎么办?
  12. Acunetix Web Vulnarability Scanner V10.5 详细中文手册
  13. PHP 获取微信小程序接口B二维码接口
  14. http接口开发请求参数签名实用工具类
  15. chrome浏览器安装油猴插件全过程
  16. collapse组件样式 react_antd源码分析之——折叠面板(collapse)
  17. Paddle安装是遇到 Error: Can not import avx core while this file exists:
  18. 邓明善:一定要学会与机遇博弈
  19. 镜像电流源特点_镜像电流源原理及其应用电路.pdf
  20. linux内核测试指南 第一章

热门文章

  1. VS如何定制自己的模板信息
  2. 性能测试以及实际中有关性能测试的问题
  3. ClassLoader类解析
  4. 设计模式 (十) 装饰者模式
  5. Oracle导入导出批处理
  6. SpringBoot整合RabbitMQ之Topic Exchange通配符交换机(学习总结)
  7. Android开发之数据库Sqlite
  8. uva1673(后缀自动机)
  9. SpringAOP配置与使用(示例)
  10. Oracle JET Model 数据获取与使用