** 按下 按钮 开始 循环, 松开 按钮 循环结束
Timer KeyDelLoopTimer; KeyDelLoopTask key_del_loop_task; private void bindKeyDel(final Button delKey){ delKey.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { KeyDelLoopTimer = new Timer(); key_del_loop_task = new KeyDelLoopTask(); if(KeyDelLoopTimer != null && key_del_loop_task != null){ KeyDelLoopTimer.scheduleAtFixedRate(key_del_loop_task,0, 50); } return false; } }); delKey.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { if (KeyDelLoopTimer != null) { KeyDelLoopTimer.cancel(); KeyDelLoopTimer = null; } if (key_del_loop_task != null) { key_del_loop_task.cancel(); key_del_loop_task = null; } } print("do touch end"); return false; } }); } private Handler KeyDelLoopHandler = new Handler(){ @Override public void handleMessage(Message msg) { print("do some thing......................................."); super.handleMessage(msg); } }; private class KeyDelLoopTask extends TimerTask{ @Override public void run() { Message message = new Message(); KeyDelLoopHandler.sendMessage(message); } }
From: http://blog.csdn.net/ithomer/article/details/6903084
方法一
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 实现计时与倒计时(限时抢购)的几种方法是 Android 应用程序开发中非常重要的一部分,特别是在购物网站的促销活动中。这些倒计时限制购物时间或者折扣的...
在Android应用开发中,有时我们需要实现一种功能,即在用户界面上显示3秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...
在Android开发中,创建一个倒计时欢迎页面是一种常见的用户交互设计,它可以为用户提供一种预期的等待体验,尤其是在应用启动时。在这个特定的项目中,"android studio倒计时三秒欢迎页面"是一个使用Android Studio...
本教程将基于提供的"android倒计时程序",探讨如何在Android平台上实现倒计时功能,并分享几种不同的样式以供初学者学习和实践。 首先,倒计时的基本原理是利用`CountDownTimer`类,这是Android SDK提供的一种计时...
本篇将基于提供的"Android 倒计时实现源码.zip"来详细解析Android倒计时的实现原理及其在实际开发中的应用。 首先,`CountDownTimer`是Android SDK提供的一种定时器类,它允许开发者创建一个在指定的时间间隔后触发...
可以使用`postInvalidate()`方法请求控件重绘,以确保UI与倒计时状态同步。 4. **属性动画与自定义属性** - 为了增加视觉效果,我们可以使用Android的属性动画API(Property Animation)来实现如数字滚动、颜色...
在这个名为"安卓天气日历时间选择倒计时相关-Android倒计时CountTime.rar"的压缩包中,很可能包含了与倒计时相关的Android代码示例,可能涉及到以下几个方面: 1. **倒计时类CountDownTimer**:这是Android SDK提供...
倒计时是一种时间流逝的逆向展示方式,常用于创建紧迫感或引导用户在特定时间内完成操作,如秒杀活动中的抢购倒计时。在Android中,我们可以使用`CountDownTimer`类来实现这个功能。`CountDownTimer`提供了两个回调...
- **Handler/Runnable**: 这是一种常见的异步处理方式,通过`postDelayed()`方法设置延迟执行的任务,每秒执行一次,更新倒计时状态。 - **CountDownTimer**: Android提供的一个内置定时器类,用于执行倒计时操作。...
然后,我们计算与倒计时结束的剩余时间,并根据结果更新文本。如果倒计时结束,会调用`timeEnd()`回调并移除视图,防止进一步的更新。 `CustomDigitalClock`还包含一个`setEndTime(long endTime)`方法,允许外部...
在Android开发中,限时抢购页面常常涉及到动态更新的倒计时显示,这通常与ListView的使用密切相关。ListView因其高效的数据展示能力而被广泛应用,但同时也存在一些挑战,如倒计时的正确显示和列表滚动时的卡顿问题...
在Android开发中,倒计时控件是一种常用的组件,它能为用户展示有限时间内的动态剩余时间,例如验证码的有效期、限时优惠活动等。本文将深入探讨如何在Android中实现一个具有后台持续计时功能的倒计时控件,即使在...
本节将详细介绍如何创建一个简单的Android计时器。 首先,我们需要了解Android计时器的基础。在Android中,有两种主要的计时方式:`CountDownTimer`和`Handler`配合`Runnable`。本例中提到的"一个简单的android计时...
然而,如果你下载的"Android 倒计时实现源码.zip"包含自定义的倒计时实现,可能有以下几种情况: 1. **线程安全**:原码可能实现了线程安全的倒计时,确保在多线程环境下也能正确工作。 2. **暂停与恢复**:源码...
在IT行业中,加载页倒计时界面是一种常见的用户体验设计元素,尤其在广告展示或视频播放等场景中。这种功能能够给用户带来明确的等待预期,同时提升产品整体的交互感和专业性。在这个主题中,我们将深入探讨加载页倒...
在Android应用开发中,验证码倒计时是一种常见的功能,它用于在用户请求获取验证码后,限制用户短时间内重复发送,以防止滥用服务。本教程将详细讲解如何在Android中实现一个验证码倒计时功能。 首先,我们需要理解...
本项目"Android倒计时器"聚焦于构建一个具备交互性与视觉效果的应用,它包含了以下几个关键知识点: 1. **Chronometer组件**:Chronometer是Android SDK提供的一种专门用于显示倒计时的UI控件。它能够实时更新显示...
在Android开发中,倒计时控件是一种常见的需求,它常用于实现各种功能,比如活动倒计时、验证码倒计时等。本篇将详细解析如何在Android中创建一个自定义的倒计时控件,以`AutoTimeTextView`为例进行讲解。 首先,...
首先,`CountDownTimer`是Android SDK提供的一种用于执行倒计时操作的工具类。它允许开发者定义一个总时长以及每隔一段时间触发的回调方法。在这个源码中,`TimeCountDown`类可能是一个自定义的倒计时器实现,扩展了...
在Android开发中,计时器(Chronometer)是一种常见的组件,用于显示已过去的时间或进行倒计时。在本篇文章中,我们将深入探讨Android Chronometer的相关知识点,包括其功能、用法、属性以及如何在实际应用中实现...