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

合集下载

countdowntimer的用法

countdowntimer的用法

countdowntimer的用法随着计时器的使用场景越来越广泛,人们对于计时器的要求也愈加多元化。

在生活、工作和娱乐等方方面面,我们都离不开计时器的帮助。

而作为计时器中的一种,countdowntimer的使用也越来越广泛,本文将会介绍countdowntimer的用法。

一、什么是countdowntimerCountdownTimer是一种计时器,是Android系统中提供的一个类。

该类可以在特定的时间段内执行一个动作,比如在5秒后自动完成某个任务。

在动作完成之前,该类可以连续更新与显示倒计时的剩余时间。

二、countdowntimer的用法1.实现步骤第一步:创建一个CountDownTimer对象该对象有两个参数:总时间和时间间隔。

总时间表示倒计时的总时间,单位是毫秒。

时间间隔表示回调函数onTick()的时间间隔,单位也是毫秒。

第二步:实现onTick()和onFinish()方法onTick()方法可以在倒计时期间连续触发,在指定时间间隔里更新用户界面。

onFinish()方法在倒计时完成时被调用,我们可以在其中完成相应的操作,比如后续任务的触发等。

第三步:启动CountDownTimer对象在CountDownTimer对象创建并设置好回调函数后,可以通过调用其start()方法来启动倒计时。

2.代码示例下面是一个基本的倒计时器示例:public class MyCountDownTimer extends CountDownTimer { public MyCountDownTimer(long millisInFuture, long countDownInterval){ super(millisInFuture, countDownInterval); }@Override public void onTick(long millisUntilFinished) { // 倒计时期间会调用此方法 // 更新用户界面 }@Override public void onFinish(){ // 倒计时完成后会调用此方法 // 完成相应操作 } }// 在Activity中使用 MyCountDownTimer countDownTimer = new MyCountDownTimer(30000, 1000); countDownTimer.start();在上面的代码中,我们创建了一个继承了CountDownTimer的自定义类MyCountDownTimer,并重写了onTick()和onFinish()方法,然后在Activity中实例化对象并启动倒计时。

android countdowntimer的用法

android countdowntimer的用法

**Android CountDownTimer的用法**`CountDownTimer` 是Android提供的一个方便实现倒计时功能的类。

它可以用来创建一个在指定时间间隔后结束的倒计时,并在每个时间间隔执行特定的操作。

以下是如何使用 `CountDownTimer` 的基本步骤和示例。

### 1. 导入CountDownTimer类首先,确保你的文件顶部导入了 `CountDownTimer` 类:```javaimport android.os.CountDownTimer;```### 2. 创建CountDownTimer实例你可以通过以下方式创建一个 `CountDownTimer` 实例:```javanew CountDownTimer(long millisInFuture, long countDownInterval) {public void onTick(long millisUntilFinished) {// 在每个时间间隔执行的操作}public void onFinish() {// 倒计时结束时执行的操作}}.start();```* `millisInFuture` 是倒计时的总时长,以毫秒为单位。

* `countDownInterval` 是每个间隔的时长,即`onTick` 方法被调用的频率,也是以毫秒为单位。

### 3. 实现onTick和onFinish方法* `onTick` 方法在每个时间间隔调用,可以用来更新UI或执行其他任务。

参数 `millisUntilFinished` 表示距离倒计时结束还剩多少毫秒。

* `onFinish` 方法在倒计时结束时调用。

你可以在这里执行倒计时结束后需要的任何操作。

### 示例代码:下面是一个简单的示例,展示如何使用`CountDownTimer` 来更新一个TextView,实现一个10秒的倒计时:```java// 假设你有一个TextView叫做textViewCountdownTextView textViewCountdown = findViewById(R.id.textViewCountdown);new CountDownTimer(10000, 1000) { // 10秒倒计时,每秒更新一次public void onTick(long millisUntilFinished) {textViewCountdown.setText("剩余: " + millisUntilFinished / 1000 + " 秒");}public void onFinish() {textViewCountdown.setText("倒计时结束!");}}.start();```这个示例中,我们创建了一个10秒的倒计时,每秒更新一次TextView的文本。

基于Android的手机时间管理App的设计与实现

基于Android的手机时间管理App的设计与实现

基于Android的手机时间管理App的设计与实现手机已成为人们生活中不可或缺的一部分,而手机时间管理App也逐渐成为了人们生活中的重要工具。

随着工作和生活压力的增加,很多人需要一款能够帮助他们高效利用时间的App。

在这样的背景下,基于Android的手机时间管理App应运而生。

本文将详细讨论基于Android的手机时间管理App的设计与实现。

一、功能设计(一)任务管理时间管理App的核心功能之一是任务管理。

用户可以通过该App创建自己的任务清单,并设定任务的优先级、截止日期、提醒时间等。

用户还可以对任务进行分类,方便查找和管理。

还可以为每个任务添加备注、附件等信息,提高任务管理的灵活性和便利性。

(二)番茄工作法番茄工作法是一种高效的时间管理方法,它将工作时间划分为固定的25分钟工作时段和5分钟休息时段。

基于Android的手机时间管理App可以内置番茄工作法功能,帮助用户更加高效地进行工作和学习。

用户可以设置定时器,进行番茄工作法的倒计时,并在工作时段结束时自动进行休息提醒。

这样能够有效地提高工作效率和注意力集中度。

(三)统计分析时间管理App还应该具备统计分析的功能,通过对用户时间使用情况进行分析,帮助用户了解自己的时间规律和高效利用时间的方法。

基于Android的手机时间管理App可以统计用户完成任务的数量、番茄工作法的时长、休息时长等数据,并生成相应的报表。

通过这些数据,用户可以更好地了解自己的时间利用情况,发现并改进自己的时间管理习惯。

(四)个人定制化时间管理App还应该支持个人定制化的功能,用户可以根据自己的需求和喜好进行个性化设置。

用户可以选择自己喜欢的主题风格,设置自己习惯的番茄工作法时长,调整提醒方式和频率等。

这样可以更好地满足用户个性化的需求,提高用户的使用体验。

二、技术实现(一)开发语言基于Android的手机时间管理App的开发可以选择使用Java或Kotlin语言。

Java是目前较为主流的Android开发语言,拥有丰富的开发资源和成熟的生态系统。

android countdowntimer 原理

android countdowntimer 原理

android countdowntimer 原理一、概述CountdownTimer是Android开发中常用的一种计时器,用于实现倒计时功能。

它通过计算剩余时间,并在达到设定的时间间隔时执行相应的操作,从而实现倒计时效果。

本篇文章将介绍CountdownTimer 的原理,包括其工作机制、生命周期、应用场景和注意事项。

二、工作机制CountdownTimer是Android自带的计时器类,通过继承CountdownTimer类并重写其中的onFinish()方法,可以实现自定义的计时器。

在CountdownTimer的实例化过程中,需要传入两个参数:一个是倒计时的结束时间(以毫秒为单位),另一个是计时器的间隔时间(以毫秒为单位)。

在开始计时前,需要调用start()方法启动计时器。

当计时器到达设定的间隔时间时,会触发onTick()方法,该方法会返回当前剩余的时间(以毫秒为单位)。

在onTick()方法中,可以根据剩余时间执行相应的操作,例如更新UI、发送通知等。

当计时器到达结束时间时,会调用onFinish()方法,表示倒计时结束。

三、生命周期CountdownTimer类在Android中属于定时器类,其生命周期与Activity、Service等组件相似。

当应用程序启动时,CountdownTimer 类会被创建,并开始计时。

当应用程序结束时,CountdownTimer类会被销毁。

因此,在使用CountdownTimer时,需要注意其生命周期,避免在应用程序关闭时仍然占用资源。

四、应用场景CountdownTimer在Android开发中应用广泛,适用于各种场景。

例如,在应用程序启动时,可以设置一个倒计时时间,让用户有足够的时间完成初始化操作;在限时活动或任务中,可以使用CountdownTimer来控制时间;在游戏开发中,可以使用CountdownTimer来实现倒计时关卡或得分计数器等。

Android开发中定时器的3种方法

Android开发中定时器的3种方法
Android开发中定时器的3种方法
2011-08-10 13:44:39 我来说两句 收藏 我要投稿 [字体:小 大]
在android中,经常用到的定时器主要有以下几种实现:
一、采用Handler与线程的sleep(long )方法
二、采用Handler的postDelayed(Runnable, long) 方法
@Override
public void run() {
++mCount;
mHandler.sendEmptyMessage(0);
}
}, 5*1000, 5*1000);
当连接USB线进行调试时,会发现一切工作正常,每5秒更新一次界面,即使是按下电源键,仍然会5秒触发一次。
当拔掉USB线,按下电源键关闭屏幕后,过一段时间再打开,发现定时器明显没有继续计数,停留在了关闭电源键时的数字。
实验2:使用AlarmService:
2.1通过AlarmService每个5秒发送一个广播,setRepeating时的类型为AlarmManager.ELAPSED_REALTIME。
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
Handler handler = new Handler() {
public void handleMessage(Message msg) {
//要做的事情
super.handleMessage(msg);
}
};
2.新建一个实现Runnable接口的线程类。如下:
public class MyThread implements Runnable{

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

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

Android实现计时与倒计时的几种方法 Timer与TimerTask方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ nprivate int recLen = 11; nprivate TextView txtView; nTimer timer = new Timer(); npublic void onCreate(Bundle savedInstanceState){ n super.onCreate(savedInstanceState); nn n setContentView(yout.timertask); n txtView = (TextView)findViewById(R.id.txttime); nn n timer.schedule(task, 1000, 1000); n// timeTask n}n nTimerTask task = new TimerTask() { n @Override n public void run() { n nrunOnUiThread(new Runnable() { n// UI thread n n @Override n n public void run() { n n nrecLen--; n n ntxtView.setText(""+recLen); n n nif(recLen < 0){ n n n timer.cancel(); n n n txtView.setVisibility(View.GONE); n n n} n n } n n}); n } n}; } n 方法二 TimerTask与Handler(不用Timer的改进型) public class timerTask extends Activity{ nprivate int recLen = 11; nprivate TextView txtView; nTimer timer = new Timer(); npublic void onCreate(Bundle savedInstanceState){ n super.onCreate(savedInstanceState); n setContentView(yout.timertask); n txtView = (TextView) findViewById(R.id.txttime); n timer.schedule(task, 1000, 1000); n// timeTask n}n nfinal Handler handler = new Handler(){ n @Override n public void handleMessage(Message msg){ n nswitch(msg.what) { n ncase 1: n n txtView.setText(""+recLen); n n if(recLen < 0){ n n ntimer.cancel(); n n ntxtView.setVisibility(View.GONE); n n } n n} n } n}; nTimerTask task = new TimerTask() { n @Override n public void run() { n nrecLen--; n nMessage message = new Message(); n nmessage.what = 1; n nhandler.sendMessage(message); n } n}; } n 方法三 Handler与Message(不用TimerTask) public class timerTask extends Activity{ nprivate int recLen = 11; nprivate TextView txtView; npublic void onCreate(Bundle savedInstanceState) { n n super.onCreate(savedInstanceState);n n setContentView(yout.timertask);n n txtView = (TextView)findViewById(R.id.txttime); n Message message = handler.obtainMessage(1); n// Message n handler.sendMessageDelayed(message, 1000); n}n nfinal Handler handler = new Handler(){ n public void handleMessage(Message msg){ n // handle message n nswitch (msg.what) { n ncase 1: n n recLen--; n n txtView.setText("" + recLen); n n if (recLen > 0){ n n nMessage message = handler.obtainMessage(1); n n nhandler.sendMessageDelayed (message, 1000); n// send message n n }else{ n n ntxtView.setVisibility(View.GONE); n n } n n} n nsuper.handleMessage(msg); n } n}; } 方法四 Handler与Thread(不占用UI线程) public class timerTask extends Activity{ nprivate int recLen = 0; nprivate TextView txtView; npublic void onCreate(Bundle savedInstanceState){ n super.onCreate(savedInstanceState); n setContentView(yout.timertask); n txtView = (TextView)findViewById(R.id.txttime); nn n new Thread(new MyThread()).start(); n // start thread n}n nfinal Handler handler = new Handler(){ n // handle n public void handleMessage(Message msg){ n nswitch (msg.what) { n ncase 1: n n recLen++; n n txtView.setText("" + recLen); n n} n nsuper.handleMessage(msg); n } n}; npublic class MyThread implements Runnable{ n// thread n @Override n public void run(){ n nwhile(true){ n n try{ n n nThread.sleep(1000); n// sleep 1000ms n n nMessage message = new Message(); n n nmessage.what = 1; n n nhandler.sendMessage(message); n n }catch (Exception e) { n n } n n} n } n} } 方法五 Handler与Runnable(最简单型) public class timerTask extends Activity{ nprivate int recLen = 0; nprivate TextView txtView; npublic void onCreate(Bundle savedInstanceState){ n super.onCreate (savedInstanceState); n setContentView(yout.timertask); n txtView = (TextView)findViewById (R.id.txttime); nn n handler.postDelayed(runnable, 1000); n}n nHandler handler = new Handler(); nRunnable runnable = new Runnable() { n @Override n public void run() { n nrecLen++; nntxtView.setText("" + recLen); n nhandler.postDelayed(this, 1000); n } n}; } n。

kotlin 语法计时器的实现方式

kotlin 语法计时器的实现方式

kotlin 语法计时器的实现方式Kotlin是一种现代化的编程语言,专为JVM设计,具有简洁、安全和高效的特点。

在Kotlin中,实现计时器有多种方式,我们将介绍其中的几种常见方式。

一、使用Thread类实现计时器在Kotlin中,可以通过继承Thread类来实现计时器。

Thread类是Java中用于创建并管理线程的类。

```kotlinimport kotlin.concurrent.threadfun main() {val timerThread = object : Thread() {override fun run() {for (i in 0..10) {println("计时器: $i sec")Thread.sleep(1000)}}}timerThread.start()//其他业务逻辑代码}```在上述代码中,我们创建了一个继承自Thread类的匿名子类。

在run()方法中,我们使用for循环模拟了一个计时器,每隔1秒打印出当前的计时器值。

通过调用start()方法启动线程,计时器开始运行。

二、使用Coroutine实现计时器Kotlin提供了一种更现代、更简洁的多线程编程方式:协程(Coroutine)。

协程可以简化异步代码的编写,使代码更易读和理解。

```kotlinimport kotlinx.coroutines.*fun main() {runBlocking {withContext(Dispatchers.Default) { for (i in 0..10) {println("计时器: $i sec")delay(1000)}}}//其他业务逻辑代码}```在上述代码中,我们使用了Kotlin协程的方式实现计时器。

runBlocking是一个阻塞当前线程的协程构建器。

在withContext函数中,我们使用了Dispatchers.Default调度器,表示这个计时器运行在一个默认的后台线程。

基于Android的手机时间管理App的设计与实现

基于Android的手机时间管理App的设计与实现

基于Android的手机时间管理App的设计与实现手机时间管理APP在当今社会已经成为了许多人的必备工具,随着社会的发展和生活节奏的加快,人们的工作和生活压力也越来越大。

精确高效的时间管理APP成为了很多人追求的目标。

本文将介绍一种基于Android系统的手机时间管理APP的设计与实现。

一、需求分析在市面上已经有很多种手机时间管理APP,但是大部分都存在一些问题,比如界面设计复杂、操作繁琐、功能冗杂等。

我们需要一个简约易用、功能强大、界面美观的手机时间管理APP。

我们设想这款APP的主要功能包括:时间记录、任务管理、番茄工作法、提醒功能等。

用户可以通过这款APP记录自己的每日安排、设定任务清单、使用番茄工作法提高工作效率,并且通过提醒功能提醒自己完成每日任务。

二、设计与实现1. 界面设计这款APP的界面设计需要做到简约大方、美观大方。

首先是首页的设计,可以设置今日的时间安排、任务清单、番茄工作法等功能入口。

任务清单页面需要清晰地列出用户的任务,并且可以进行任务的添加、删除、编辑等操作。

番茄工作法页面需要设置工作时长和休息时长,并且显示倒计时。

提醒功能则可以通过弹窗、通知栏、震动等方式进行提醒。

2. 功能实现时间记录功能可以通过记录用户的起床时间、工作时间、学习时间等来帮助用户了解自己在一天中的时间分配情况,从而进行合理的时间规划。

任务管理功能可以通过添加、删除、编辑任务来帮助用户安排工作和生活。

番茄工作法功能可以帮助用户提高工作效率,通过工作时长和休息时长的设置来提醒用户进行高效工作和休息。

提醒功能可以通过设置提醒时间和提醒内容来帮助用户完成每日任务。

三、技术实现这款APP的开发使用Android系统平台,需要掌握Android开发的相关技术。

界面设计可以使用Android Studio进行设计,通过XML布局文件进行页面设计,使用Java代码实现界面的交互逻辑。

时间记录和任务管理功能可以使用SQLite数据库进行数据存储,通过SQL语句实现数据的增删改查操作。

Android列表倒计时的实现的示例代码(CountDownTimer)

Android列表倒计时的实现的示例代码(CountDownTimer)

Android列表倒计时的实现的⽰例代码(CountDownTimer)实习⼀段时间了,⼀直想写点技术总结,但⼀直没找到合适的主题。

刚好,最近版本中我负责的模块遇到了个线程相关问题(之前⼀直画界⾯,做点基础功能,有点乏味),列表项倒计时的实现。

于是乎,我的第⼀篇android技术⽂章就诞⽣了。

【醒⽬】该demo⽤Kotlin语⾔实现。

背景介绍需要在ListView的item⾥实现倒计时,初看还挺简单的,但是真正做的时候也遇到了不少坑。

⽹上有不少类似⽂章,有⽤对TextView扩展实现的,也有⽤⾃带的CountDownTimer实现的,本⽂就是⽤CountDownTimer,只不过多了对服务器时间的刷新控制,更贴近项⽬需求吧。

刚学了点kotlin,就拿这个来练练⼿。

所以这个demo的源码就⽤koltin实现了,想了解学习kotlin的也可以来交流下,刚学,代码⾥可能有些细节语法⽤的不好。

要点分析:倒计时需要根据请求所得服务器时间和结束时间确定(所以要⼀个线程来维持服务器时间的运⾏,⽽且还有n个线程来维持item项的倒计时刷新显⽰)。

既然是多线程,那么线程的控制就要注意了解CountDownTimer在看代码前,先来了解下android⾃带的CountDownTimer类⽤法private CountDownTimer timer = new CountDownTimer(30000, 1000) {//根据间隔时间来不断回调此⽅法,这⾥是每隔1000ms调⽤⼀次@Overridepublic void onTick(long millisUntilFinished) {//todo millisUntilFinished为剩余时间,也就是30000 - n*1000}//结束倒计时调⽤@Overridepublic void onFinish() {//todo}};//开始倒计时timer.start();//取消倒计时(译者:取消后,再次启动会重新开始倒计时)timer.cancel();;这⾥的⼊参再解释下new CountDownTimer(30000, 1000)。

300程序实现倒计时实例

300程序实现倒计时实例

300程序实现倒计时实例一、介绍倒计时(Countdown)是指从一个特定的时间点开始,向后计算时间,直到特定的时间点结束。

在计算机程序中,倒计时经常被用于各种场景,比如倒计时器、倒计时游戏等。

本文将介绍如何通过程序实现倒计时的功能,并提供一个示例。

二、利用编程语言实现倒计时倒计时功能在各种编程语言中都可以实现,比如Python、Java、C++等。

下面以Python语言为例,介绍如何通过编写代码来实现倒计时功能。

1. 导入time模块在Python中,我们可以使用time模块来实现时间相关的功能。

首先,我们需要导入time模块。

import time2. 设置倒计时时间接下来,我们需要设置倒计时的时间。

可以通过获取当前时间,再加上需要倒计时的秒数来计算出结束时间。

seconds = 60 # 倒计时的秒数end_time = time.time() + seconds # 结束时间 = 当前时间 + 倒计时秒数3. 开始倒计时接下来,我们可以通过一个循环来实现倒计时。

在每一次循环中,我们可以获取当前时间,然后与结束时间比较,计算出还剩下多少秒。

while True:current_time = time.time() # 当前时间remaining_seconds = end_time - current_time # 还剩下的秒数if remaining_seconds <= 0:print("时间到!")breakminutes = int(remaining_seconds // 60) # 剩下的分钟数seconds = int(remaining_seconds % 60) # 剩下的秒数print(f"倒计时:{minutes} 分钟 {seconds} 秒")time.sleep(1) # 暂停1秒4. 运行程序最后,我们可以运行上述代码,即可开始倒计时。

实现3秒倒计时的方法

实现3秒倒计时的方法

实现3秒倒计时的方法倒计时是我们生活中经常会遇到的场景。

在许多场合,我们需要使用倒计时功能,例如倒计时比赛开始时间、倒计时考试时间等。

在其中,3秒倒计时是较为常见的一种。

为了实现3秒倒计时,下面介绍几种方法。

方法一,使用JavaScript实现3秒倒计时:在HTML页面中,添加一个计时器的容器,以便将倒计时显示在其中。

然后,通过JavaScript获取容器对象,并定义倒计时函数。

函数中,设置初始倒计时时间为3秒,并将当前时间插入到容器中。

接着,通过setInterval()函数实现每秒减少1的倒计时,并将新的倒计时时间插入到计时器容器中,当倒计时时间为0时,清楚定时器。

最后,显示提示信息。

方法二,使用CSS3和jQuery操作实现3秒倒计时:在HTML页面中,定义一个div元素,并使用CSS3设置元素的宽度、高度、圆角和动画效果。

接着,使用jQuery获取该div元素,并定义倒计时函数。

函数中,通过jQuery的animate()函数实现每秒减少1的倒计时,在动画完成后,清空页面元素。

方法三,使用HTML5实现3秒倒计时:在HTML页面中,使用Canvas元素绘制倒计时数字。

通过HTML5中的requestAnimationFrame()方法实现每秒减少1的倒计时,当计时完成时,通过Canvas元素绘制提示信息。

以上三种方法,可以根据实际需求选择。

在实现倒计时时,也需要考虑到用户体验。

例如,为了提高用户体验,在倒计时中可以设置音效和界面效果。

倒计时功能也可以通过API接口来实现,以适配不同平台和设备。

总之,在实现3秒倒计时功能时,需要考虑到实际需求,并结合不同的技术和方法来完成。

这将有助于优化用户体验和增强用户参与度。

Android中实现倒计时的几种方式

Android中实现倒计时的几种方式

Android中实现倒计时的⼏种⽅式1.使⽤ CountDownTimer 实现倒计时/*** CountDownTimer timer = new CountDownTimer(3000, 1000)中,* 第⼀个参数表⽰总时间,第⼆个参数表⽰间隔时间。

* 意思就是每隔⼀秒会回调⼀次⽅法onTick,然后1秒之后会回调onFinish⽅法。

*/CountDownTimer timer = new CountDownTimer(3000, 1000) {public void onTick(long millisUntilFinished) {txt.setText("倒计时" + millisUntilFinished / 1000 + "秒");}public void onFinish() {Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);}};//调⽤ CountDownTimer 对象的 start() ⽅法开始倒计时,也不涉及到线程处理timer.start();2.利⽤Handler实现倒计时private int count = 5;private TextView tv;private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what==100){if(count>0){tv.setText(count+"");count--;handler.sendEmptyMessageDelayed(100,1000);}else {Intent intent = new Intent(MainActivity.this,Main2Activity.class);startActivity(intent);}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initView();}private void initView() {tv = (TextView) findViewById();handler.sendEmptyMessageDelayed(100,1000);}3.利⽤动画实现倒计时private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);tv = (TextView) findViewById();ValueAnimator animator = ValueAnimator.ofInt(5,0);//设置时间animator.setDuration(5000);//均匀显⽰animator.setInterpolator(new LinearInterpolator());//监听animator.addUpdateListener(new AnimatorUpdateListener() { @Overridepublic void onAnimationUpdate(ValueAnimator animation) { int value = (Integer) animation.getAnimatedValue();tv.setText(value+"");if(value==0){startActivity(new Intent(MainActivity.this,Second.class)); }}});animator.start();}4.利⽤Timer定时器private TextView tv;static int count = 5;Handler handler = new Handler(){public void handleMessage(Message msg) {int count = msg.arg1;if(count==0){iv.setText("你好");}else {iv.setText(count+"");}};};@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_main);tv = (TextView) findViewById(R.id.iv);Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {Message message = new Message();message.arg1 = count;if(count!=-1){count--;}else {return;}handler.sendMessage(message);}}, 1000,1000);}。

android实现倒计时功能(开始、暂停、0秒结束)

android实现倒计时功能(开始、暂停、0秒结束)

android实现倒计时功能(开始、暂停、0秒结束)本⽂实例为⼤家分享了android实现倒计时功能的具体代码,供⼤家参考,具体内容如下【思路】:通过 timer 执⾏周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer 的周期任务。

- 在布局⽂件中添加⼀个TextView和Button控件,并在onCreate⽅法中获得到TextView和Button的id;xml布局代码:<Buttonandroid:id="@+id/button_start_timer"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:layout_gravity="center_vertical"android:gravity="center"android:text="开始"android:textSize="12sp"/><TextViewandroid:id="@+id/textViewTime24"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="2"android:gravity="center"android:text="24"android:textColor="#33ff00"android:textSize="60sp" />java代码package com.example.wlf.gamerecorder.gameon;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.os.Handler;import com.example.wlf.gamerecorder.R;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class SimpleGameonActivity extends AppCompatActivity {private final static int COUNT = 1;private final static int TOTAL_TIME_24 = 24;private TextView textViewTime24;Timer timer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_simple_gameon);textViewTime24=(TextView)findViewById(R.id.textViewTime24);//24秒倒计时final Button button_start_timer = (Button)findViewById(R.id.button_start_timer);button_start_timer.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String str = button_start_timer.getText().toString();//获取按钮字符串if(str.equals("开始")){ //切换按钮⽂字button_start_timer.setText("暂停");initView();}else{button_start_timer.setText("开始");timer.cancel();//终⽌线程}}});}public void initView(){//countDown = (TextView) findViewById(R.id.textViewTime24);timer = new Timer();/*** 每⼀秒发送⼀次消息给handler更新UI* schedule(TimerTask task, long delay, long period)*/timer.schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(COUNT);}}, 0, 1000);}private Handler handler = new Handler(){int num = TOTAL_TIME_24;public void handleMessage(android.os.Message msg) {switch (msg.what) {case COUNT:textViewTime24.setText(String.valueOf(num));if(num == 0)timer.cancel();//0秒结束num--;break;default:break;}};};}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

android date 用法

android date 用法

android date 用法在Android开发中,处理日期和时间通常涉及到几个关键类,如 `Date`、`Calendar` 和 `` 包中的新日期时间API。

以下是这些类的一些基本用法:1. 使用 `Date` 类`Date` 类用于表示特定的瞬间,精确到毫秒。

```javaimport ;public class DateExample {public static void main(String[] args) {// 创建一个Date对象,代表当前时间Date currentDate = new Date();("当前时间: " + currentDate);// 获取年、月、日、时、分、秒int year = ();int month = () + 1; // getMonth() 是从0开始的,所以要+1 int day = ();int hour = ();int minute = ();int second = ();("年: " + year);("月: " + month);("日: " + day);("时: " + hour);("分: " + minute);("秒: " + second);}}```2. 使用 `Calendar` 类`Calendar` 类是一个抽象类,用于处理日期和时间。

```javaimport ;public class CalendarExample {public static void main(String[] args) {// 创建一个Calendar对象,并设置时区为GMTCalendar calendar = (("GMT"));("当前时间(GMT): " + ());// 设置特定的年、月、日、时、分、秒(2023, , 23, 10, 30, 0); // 年月日时分秒 (注意:月份是从0开始的,所以要-1)("特定时间(GMT): " + ());}}```3. 使用 `` 包中的新日期时间API(推荐)从Java 8开始,引入了一个新的日期和时间API,位于 `` 包中。

android chronometer 用法

android chronometer 用法

android chronometer 用法Android Chronometer 用法介绍Android Chronometer 是一个用于显示计时的控件。

它是TextView 的子类,可以方便地实现倒计时或计时功能。

基本用法以下是使用 Android Chronometer 的基本步骤:1.在 XML 布局文件中添加 Chronometer 控件:<Chronometerandroid:id="@+id/chronometer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:format="HH:MM:SS" />2.在 Activity 中获取 Chronometer 对象:Chronometer chronometer = findViewById();3.设置计时器的基本属性:(()); // 设置基准时间为系统启动时间("HH:MM:SS"); // 设置计时格式4.控制计时器的开始与暂停:(); // 开始计时(); // 暂停计时进阶用法计时器监听器可以使用setOnChronometerTickListener方法来监听计时器的变化事件:(new () {@Overridepublic void onChronometerTick(Chronometer chronomete r) {// 在这里可以处理计时器每秒钟的变化事件}});设置起始时间可以通过setBase方法设置计时器的起始时间:long startTime = () - 60000; // 设置起始时间为系统启动时间前 1 分钟(startTime);获取计时时间可以使用getBase方法获取计时器的当前时间:long elapsedTime = () - (); // 获取计时经过的时间格式化计时显示可以通过setFormat方法设置计时器的显示格式,支持以下格式:•HH:MM:SS:小时、分钟、秒钟•MM:SS:分钟、秒钟("MM:SS"); // 设置为只显示分钟和秒钟结论Android Chronometer 是一个方便实用的计时器控件,可以用于倒计时或计时功能。

android实现圆环倒计时控件

android实现圆环倒计时控件

android实现圆环倒计时控件本⽂实例为⼤家分享了android实现圆环倒计时控件的具体代码,供⼤家参考,具体内容如下1.⾃定义属性<?xml version="1.0" encoding="utf-8"?><resources><!-- 倒计时控件属性 --><declare-styleable name="CountDownView"><!--颜⾊--><attr name="ringColor" format="color" /><!-- 进度⽂本的字体⼤⼩ --><attr name="progressTextSize" format="dimension" /><!-- 圆环宽度 --><attr name="ringWidth" format="float" /><!--进度⽂本颜⾊--><attr name="progressTextColor" format="color"/><!--倒计时--><attr name="countdownTime" format="integer"/></declare-styleable></resources>2.⾃定义viewpublic class CountDownView extends View {//圆环颜⾊private int mRingColor;//圆环宽度private float mRingWidth;//圆环进度值⽂本⼤⼩private int mRingProgessTextSize;//宽度private int mWidth;//⾼度private int mHeight;private Paint mPaint;//圆环的矩形区域private RectF mRectF;//private int mProgessTextColor;private int mCountdownTime;private float mCurrentProgress;ValueAnimator valueAnimator;/*** 监听事件*/private OnCountDownListener mListener;public CountDownView(Context context) {this(context, null);}public CountDownView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public CountDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// init();/*** 获取相关属性值*/TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CountDownView);mRingColor = typedArray.getColor(R.styleable.CountDownView_ringColor, context.getResources().getColor(R.color.colorAccent));mRingWidth = typedArray.getFloat(R.styleable.CountDownView_ringWidth, 40);mRingProgessTextSize = typedArray.getDimensionPixelSize(R.styleable.CountDownView_progressTextSize, 20);mProgessTextColor = typedArray.getColor(R.styleable.CountDownView_progressTextColor, context.getResources().getColor(R.color.colorAccent)); mCountdownTime = typedArray.getInteger(R.styleable.CountDownView_countdownTime, 60);typedArray.recycle();mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setAntiAlias(true);this.setWillNotDraw(false);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);mWidth = getMeasuredWidth();mHeight = getMeasuredHeight();mRectF = new RectF(0 + mRingWidth / 2, 0 + mRingWidth / 2,mWidth - mRingWidth / 2, mHeight - mRingWidth / 2);}/*** 设置倒计时间单位秒* @param mCountdownTime*/public void setCountdownTime(int mCountdownTime) {this.mCountdownTime = mCountdownTime;invalidate();}// public CountDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {// super(context, attrs, defStyleAttr, defStyleRes);// }/*** 动画* @param countdownTime* @return*/private ValueAnimator getValueAnimator(long countdownTime) {ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 100);valueAnimator.setDuration(countdownTime);valueAnimator.setInterpolator(new LinearInterpolator());valueAnimator.setRepeatCount(0);return valueAnimator;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);/***圆环*///颜⾊mPaint.setColor(mRingColor);//空⼼mPaint.setStyle(Paint.Style.STROKE);//宽度mPaint.setStrokeWidth(mRingWidth);canvas.drawArc(mRectF, -90, mCurrentProgress - 360, false, mPaint);//绘制⽂本Paint textPaint = new Paint();textPaint.setAntiAlias(true);textPaint.setTextAlign(Paint.Align.CENTER);String text = mCountdownTime - (int) (mCurrentProgress / 360f * mCountdownTime) + "";textPaint.setTextSize(mRingProgessTextSize);textPaint.setColor(mProgessTextColor);//⽂字居中显⽰Paint.FontMetricsInt fontMetrics = textPaint.getFontMetricsInt();int baseline = (int) ((mRectF.bottom + mRectF.top - fontMetrics.bottom - fontMetrics.top) / 2); canvas.drawText(text, mRectF.centerX(), baseline, textPaint);}/*** 开始倒计时*/public void startCountDown() {valueAnimator = getValueAnimator(mCountdownTime * 1000);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float i = Float.valueOf(String.valueOf(animation.getAnimatedValue()));mCurrentProgress = (int) (360 * (i / 100f));invalidate();}});valueAnimator.start();valueAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);//倒计时结束回调if (mListener != null) {mListener.countDownFinished();}}});}/*** 停⽌倒计时*/public void stopCountDdwn(){valueAnimator.cancel();}public void setOnCountDownListener(OnCountDownListener mListener) {this.mListener = mListener;}}3.布局⽂件<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="/apk/res/android" xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><.countdowndemo.CountDownViewandroid:id="@+id/countDownView"android:layout_width="50dp"android:layout_height="50dp"app:countdownTime="5"app:ringWidth="2"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>4.Activitypublic class MainActivity extends AppCompatActivity {CountDownView countDownView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);countDownView = findViewById(R.id.countDownView);countDownView.setOnCountDownListener(new OnCountDownListener() {@Overridepublic void countDownFinished() {//倒计时结束//countDownView.setCountdownTime(10);Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);}});countDownView.startCountDown();countDownView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {countDownView.stopCountDdwn();Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);}});}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

学习使用AndroidChronometer计时器

学习使用AndroidChronometer计时器

学习使⽤AndroidChronometer计时器本⽂实例为⼤家分享了Android Chronometer计时器基本使⽤⽅法,供⼤家参考,具体内容如下在默认情况下,Chronometer组件只输出MM:SS或H:MM:SS的时间格式。

例如,当计时到1分20秒时,Chronometer组件会显⽰01:20。

如果想改变显⽰的信息内容,可以使⽤Chronometer类的setFormat⽅法。

该⽅法需要⼀个String变量,并使⽤"%s"表⽰计时信息。

例如,使⽤setFormat("计时信息:%s")设置显⽰信息,Chronometer组件会显⽰如下计时信息:计时信息:10:20android:format;//定义时间的格式如:hh:mm:sssetFormat("计时:%s"); //设置显⽰格式setFormat(String format);//设置显⽰时间的格式。

start();//开始计时stop();//停⽌计时setBase();//设置基地时间,⼀般都是SystemClock.elapsedRealtime()setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener);//当计时器改变时调⽤案例:1.定义布局⽂件chronometer.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><Chronometerandroid:id="@+id/chronometer"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/chronometer_start"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始计时"/><Buttonandroid:id="@+id/chronometer_end"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="停⽌计时"/><Buttonandroid:id="@+id/chronometer_null"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="重新开始计时"/></LinearLayout>2.java代码⽂件:ChronometerDemo.javapackage com.test;import android.app.Activity;import android.os.Bundle;import android.os.SystemClock;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Chronometer;public class ChronometerDemo extends Activity {private Chronometer chronometer;private Button button_start, button_end,button_bull;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.chronometer);chronometer =(Chronometer)findViewById(R.id.chronometer); button_start =(Button)findViewById(R.id.chronometer_start); button_end =(Button)findViewById(R.id.chronometer_end);button_bull =(Button)findViewById(R.id.chronometer_null);button_start.setOnClickListener(clickListener);button_end.setOnClickListener(clickListener);button_bull.setOnClickListener(clickListener);}private OnClickListener clickListener = new OnClickListener() { @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.chronometer_start://调⽤start()⽅法开始计时chronometer.start();button_start.setText("正在计时...");break;case R.id.chronometer_end://调⽤stop()⽅法停⽌计时chronometer.stop();button_start.setText("继续计时");break;case R.id.chronometer_null://调⽤stop()⽅法停⽌计时chronometer.setBase(SystemClock.elapsedRealtime()); chronometer.start();button_start.setText("正在计时...");break;default:break;}}};}3. 运⾏效果:有⼀个问题就是,计时器开始计时后,⼀段时间之后,点击停⽌计时,⼀段时间后,点击继续计时,但是这个时间的不是停⽌后的那个时间。

android获取短信验证码倒计时

android获取短信验证码倒计时

Android获取短信验证码倒计时目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮点击是无效的,当倒计时结束后,如果你没有获取到验证码,可以再次点击。

实现倒计时的方法很多,我们今天就通过继承android.os.CountDownTimer类来实现!首先看下我们封装的倒计时工具类,主要为了在多个地方用到的话,用了多个构造方法,就是为了使用更灵活,只要传入对数就可以调用了:public class MyCountTimer extends CountDownTimer {public static final int TIME_COUNT = 121000;//时间防止从119s开始显示(以倒计时120s 为例子)private TextView btn;private int endStrRid;private int normalColor, timingColor;//未计时的文字颜色,计时期间的文字颜色* 参数millisInFuture 倒计时总时间(如60S,120s等)* 参数countDownInterval 渐变时间(每次倒计1s)* 参数btn 点击的按钮(因为Button是TextView子类,为了通用我的参数设置为TextView)* 参数endStrRid 倒计时结束后,按钮对应显示的文字public MyCountTimer (long millisInFuture, long countDownInterval, TextView btn, int endStrRid) {super(millisInFuture, countDownInterval);this.btn = btn;this.endStrRid = endStrRid;public MyCountTimer (TextV iew tv_varify, int normalColor, int timingColor) { this(tv_varify);this.normalColor = normalColor;this.timingColor = timingColor;// 计时完毕时触发@Overridepublic void onFinish() {if(normalColor 0){btn.setTextColor(normalColor);btn.setText(endStrRid);btn.setEnabled(true);// 计时过程显示@Overridepublic void onTick(long millisUntilFinished) {if(timingColor 0){btn.setTextColor(timingColor);btn.setEnabled(false);btn.setText(millisUntilFinished / 1000 + s}然后在你要实现倒计时的页面用就可以了:比如在AcvitityA中点击倒时间的按钮Button smsBtn=findViewById(R.id.....);MyCountTimertimeCount = new MyCountTimer(smsBtn, 0xfff30008, 0xff969696);//传入了文字颜色值timeCount.start();如时你不传入颜色值的话,也可以在点击按钮smsBtn的布局文件中根据按钮状态来设置颜色。

Android中CountDownTimer类详解

Android中CountDownTimer类详解

Android中CountDownTimer类详解⼀、概述项⽬中经常⽤到倒计时的功能,⽐如说限时抢购,⼿机获取验证码等等。

⽽google官⽅也帮我们封装好了⼀个类:CountDownTimer,使我们的开发更加⽅便;⼆、APICountDownTimer是⼀个抽象类,有两个抽象⽅法,它的API很简单public abstract void onTick(long millisUntilFinished);//这个是每次间隔指定时间的回调,millisUntilFinished:剩余的时间,单位毫秒public abstract void onFinish();//这个是倒计时结束的回调使⽤的时候只需要new CountDownTimer(long millisInFuture, long countDownInterval)//millisInFuture:倒计时的总时长//countDownInterval:每次的间隔时间单位都是毫秒三、基本使⽤⽅法我们以短信验证码的倒计时来看,点击获取验证码,倒计时60s不可点击new CountDownTimer(60 * 1000, 1000) {@Overridepublic void onFinish() {if (tvCode != null) {tvCode.setText("重新获取");tvCodeWr.setTextColor(Color.parseColor("#E94715"));tvCode.setClickable(true);tvCode.setEnabled(true);}cancel();}@Overridepublic void onTick(long millisUntilFinished) {if (tvCode != null) {tvCode.setClickable(false);tvCode.setEnabled(false);tvCode.setText(millisUntilFinished / 1000 + "s");tvCode.setTextColor(Color.parseColor("#999999"));}}}.start();点击按钮,获取验证码成功之后就可以执⾏以上操作,最后⼀定要start,不然不会执⾏四、使⽤注意CountDownTimer使⽤很简单,但是坑很多,需要注意避免踩坑。

使用倒数日的流程

使用倒数日的流程

使用倒数日的流程概述倒数日是一款时间管理工具,可以帮助用户倒计算特定日期或事件之间的天数,提醒用户确保任务或目标按时完成。

本文档介绍了使用倒数日的流程,从创建倒数日到管理和共享倒数日的详细步骤。

步骤1. 安装倒数日应用从应用商店或开发者官网上下载并安装倒数日应用。

确保你的设备与应用的兼容性,并按照安装向导进行安装。

2. 打开倒数日应用在设备上找到倒数日应用的图标,点击打开应用。

3. 创建倒数日在倒数日应用的主界面,点击“创建新的倒数日”或类似按钮。

4. 填写倒数日信息按照应用的提示,在弹出的界面上填写倒数日的相关信息,包括标题、日期、事件描述等。

可以给倒数日添加颜色标签以区分不同的事件。

5. 设置提醒方式和时间在倒数日的详细设置中,选择你希望接收提醒的方式和时间。

可以选择短信、推送通知、电子邮件等不同的提醒方式,并设置提醒时间。

确保你在需要前足够的时间收到提醒。

6. 保存并查看倒数日点击“保存”或类似按钮,保存倒数日设置。

然后回到应用的主界面,可以看到刚创建的倒数日。

7. 管理倒数日在应用的主界面,你可以看到所有创建的倒数日。

点击特定的倒数日,可以查看详细信息,包括剩余天数、事件描述和提醒设置等。

你可以随时修改倒数日的信息和提醒设置。

8. 共享倒数日如果你想要与他人共享倒数日,可以通过应用提供的共享功能实现。

选择特定的倒数日,点击“共享”或类似按钮,然后选择共享的方式,例如通过短信、邮件或社交媒体分享链接。

9. 删除倒数日当倒数日过期或者不再需要时,你可以选择删除倒数日。

在应用的主界面或倒数日详细界面,长按特定的倒数日,然后选择“删除”或类似选项。

小结使用倒数日可以帮助你更有效地管理时间,确保重要的任务或目标不被忽视。

按照上述步骤,你可以轻松地创建、管理和共享倒数日。

记住根据实际需要设定适当的提醒方式和时间,并定期检查和更新倒数日信息,以保持时间管理的高效性。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Handler与Runnable(最简单型)
public class timerTask extends Activity{ private int recLen = 0; private TextView txtView; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(yout.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); } };}计时与倒计时
方法二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(yout.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); } };}方法三
方法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之多线程工作-AsyncTask与handler
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.onCreate(savedInstanceState); setContentView(yout.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); } } }); }占用UI线程)
public class timerTask extends Activity{ private int recLen = 0; private TextView txtView; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(yout.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与Message(不用TimerTask)
public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.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); } };}方法四
相关文档
最新文档