1. 计时器
两个核心类 Timer 和 TimerTask
1) Timer核心方法
//Schedules the specified task for execution after the specified delay. void schedule(TimerTask task, long delay) //Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay. void schedule(TimerTask task, long delay, long period)
第一个方法只执行一次;
第二个方式每隔period执行一次,delay表示每次执行的延时时间,其实主要表现在第一次的延时效果,比如delay设置为0,那么立马执行task内容,如果设置为1000,那么第一次执行task会有一秒的延时效果。
2) TimerTask用于继承(或者直接定义并初始化匿名类),并重写run方法,定义自己的业务逻辑。
3) 手动结束定时器,
Timer和TimerTask都有cancel方法,而且最好同时调用;
如果已经cancel,下次必须创建新的Timer才能schedule。
4) 如果你在当前的activity中schedule了一个task,但是没有等到task结束,就按Back键finish了当前的activity,Timer和TimerTask并不会自动cancel或者销毁,它还会在后台运行,此时如果你在task的某个阶段要调起一个控件(比如AlertDialog),而该控制依赖被销毁的activity,那么将会引发crash。
5) 例如对进度条实现每一秒递增的效果(主要代码)
//总时长 private static final long TOTAL_QUERY_MINUTES = 50; //比如每5秒去查询数据库 private static final long QUERY_INTERVAL = 5 *1000; private static final int TIMER_SCHEDULE_CODE = 1; int timePassed=0; QueryTimerTask queryTask; private Timer timer; //显示定时器的效果 ProgressBar statusBar; private Handler mHandler= new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case TIMER_SCHEDULE_CODE: statusBar.setProgress(timePassed); //Log.w(TAG, "timePassed : " + timePassed + " -- TOTAL_QUERY_MINUTES : " + TOTAL_QUERY_MINUTES); if (timePassed>=TOTAL_QUERY_MINUTES){ if (timer != null) timer.cancel(); if (queryTask != null) queryTask.cancel(); new AlertDialog.Builder(YourActivity.this). setTitle("超时通知").setMessage("已超时,是否继续等待?") .setPositiveButton("继续等待", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { reSchedule(); } }) .setNegativeButton("取消任务", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //cancelTask(); } }).show(); break; //.... } return true; } }); void reSchedule() { timePassed = 0; if (timer != null) { timer.cancel(); } if (queryTask != null) { queryTask.cancel(); } timer = new Timer(); queryTask = new QueryTimerTask(); //每一秒执行一次,第一次有延时一秒的效果 timer.schedule(queryTask, 1000, 1000); } //自定义task class QueryTimerTask extends TimerTask { @Override public void run() { //比如每过QUERY_INTERVAL去查询信息 if ((timePassed * 1000) % QUERY_INTERVAL == 0) { //query(); } timePassed++; //通知handler去改变statusBar Message message = mHandler.obtainMessage(); message.what = TIMER_SCHEDULE_CODE; mHandler.sendMessage(message); } }
2. 倒计时
其实也可以用上面的方法实现,
安卓额外提供了CountdownTimer类
//由于以1秒间隔不准,所以取其一半来做间隔 int countTemp = 2; //此处写的是500的间隔,实际通过countTemp达到1秒间隔的效果 countDownTimer = new CountDownTimer(5000, 500) { @Override public void onTick(long millisUntilFinished) { if (countTemp == 2) { //可以看出来其实millis并不是非常标准的 Log.w(TAG, String.format("%d秒", millisUntilFinished)); Log.w(TAG, String.format("%d秒", Math.round(millisUntilFinished / 1000.0))); getCodeBtn.setText(String.format("%d秒", Math.round(millisUntilFinished / 1000.0))); countTemp--; } else { countTemp++; } } @Override public void onFinish() { getCodeBtn.setText("获取验证码"); isCountDown = true; countTemp = 2; } }; } //开始倒计时 countDownTimer.start();
这个类实际使用还是有点麻烦的,详见
Android: CountDownTimer skips last onTick
Android CountDownTimer shows 1 for two seconds
CountDownTimer skipping one second when displaying on TextView
相关推荐
总的来说,这个项目是一个基础的Android计时器应用,它展示了如何在Android Studio中创建用户界面、处理用户交互以及实现计时功能。通过这个项目,初学者可以学习到Android应用的基本架构、Activity的生命周期、UI...
本资源提供了一个简单的Android计时器源码,包含了开始、暂停和重置功能,是学习Android计时器应用的一个良好示例。下面我们将详细探讨Android计时器的实现及其相关知识点。 首先,Android中的计时器主要有两种:`...
在Android开发中,倒计时器(CountDownTimer)是一个常用的功能,用于实现从一个给定的时间点开始倒计时的逻辑。这个“android简易倒计时器”应该是一个简单的实现,适合初学者理解并应用到自己的项目中。在本文中,...
这个项目适合初学者学习和理解Android计时器的实现方式,也可以根据自己的需求进行修改以适应不同的项目需求。 首先,我们需要了解Android中常用的两种计时器:`java.util.Timer` 和 `android.os.Handler`。在这个...
在Android开发中,创建一个促销倒计时的计时器是一项常见的需求,它通常用于电商平台或者活动页面,用来展示剩余的优惠时间,增加用户的紧迫感。这个特定的案例提到的"android 促销 倒计时 时分秒"是一个显示天、时...
本例中提到的"一个简单的android计时器"很可能使用了`CountDownTimer`类,因为它更易于理解和使用。 `CountDownTimer`类是Android提供的一个内置计时工具,它能从一个预设的总时间开始倒计时,并在每个时间间隔执行...
"android 计时器"通常指的是Android SDK提供的一系列类,用于帮助开发者实现倒计时或者周期性任务。本篇将深入探讨如何使用Android中的计时器,特别是基于`CountDownTimer`的改编版本。 `CountDownTimer`是Android...
在Android开发中,计时器工具是不可或缺的一部分,特别是在创建倒计时或者定时触发某些功能的应用场景中。本文将深入探讨Android中常用的倒计时实现方式——`CountDownTimer`控件,以及如何在子线程中更新UI,并结合...
总之,`HLQCountDownTimer`作为Android计时器的一个自定义实现,旨在提供更丰富的功能和更好的用户体验。通过理解和运用这些计时器机制,开发者能够创建出具有更复杂时间控制逻辑的应用。在实际项目中,可以根据具体...
在Android开发中,倒计时器(CountDownTimer)是一个非常实用的组件,常用于实现各种需要倒计时功能的应用场景,比如定时提醒、在线考试、抢购倒计时等。`CountDownTimer` 类是Android SDK提供的一个内置类,它可以...
在Android应用开发中,有时我们需要实现一种功能,即在用户界面上显示3秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...
在IT领域,计时器和倒计时是两种常见的时间管理工具,广泛应用于各种软件、网页和移动应用中。在给定的标题“计时器(秒表、倒计时)”中,我们可以理解这是一个集成了秒表和倒计时功能的程序。描述中提到它是“单...
在Android和Linux操作系统中,计时器是一种至关重要的机制,用于执行特定时间间隔的操作或触发时间相关的事件。本文将深入探讨三种不同的计时器实现,包括它们的工作原理、优缺点以及适用场景。 第一种计时器实现:...
本篇将详细讲解如何在Android应用中实现一个具备开始、暂停、继续、停止和重置功能的倒计时器。 一、倒计时器基础 Android中的`CountDownTimer`类位于`android.os`包下,它提供了一个简单的方法来启动一个倒计时。...
在Android平台上,倒数计时器(CountdownTimer)是一个常用的功能,用于实现从特定时间点开始倒计时至零的计时任务。本项目"android简单倒数计时器"是一个基于Ubuntu 10.04操作系统和Eclipse Galileo IDE的Android...
综上所述,这个Android计时器应用涉及到多个Android开发的核心知识点,包括时间管理、UI交互、数据存储和性能优化。通过理解和实现这些功能,开发者可以提升对Android应用开发的理解和实践能力。
在Android开发中,正计时和倒计时是常见的功能,比如用于游戏计时、定时提醒或者倒计时器应用。本教程将详细介绍如何在Android环境中实现这些功能,包括开始计时、开始倒计时、暂停、继续以及重置。 首先,我们需要...
在这个项目中,开发者可能使用了Android Studio的布局编辑器来设计欢迎页面的UI,包括倒计时按钮和相关的文本视图来显示倒计时。 倒计时功能通常通过两种方式实现:Handler和CountDownTimer。在这个Demo中,可能...
本文将深入探讨Android计时器的工作原理、使用方法以及如何查看和理解其源代码。 计时器(Chronometer)在Android中属于`android.widget`包的一部分,它提供了一个易于使用的界面,可以显示倒计时或者累计计时。这...
在Android开发中,倒计时(CountDownTimer)和计时器(Timer)是两种常见的时间管理工具,用于实现各种时间相关的功能,如倒计时、定时任务等。本篇文章将详细探讨这两种机制,以及如何在Android应用中利用线程来...