`

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

 
阅读更多

** 按下 按钮 开始 循环,  松开 按钮 循环结束

    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 应用程序开发中非常重要的一部分,特别是在购物网站的促销活动中。这些倒计时限制购物时间或者折扣的...

    android的3秒倒计时关闭界面或点击关闭

    在Android应用开发中,有时我们需要实现一种功能,即在用户界面上显示3秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...

    android studio倒计时三秒欢迎页面

    在Android开发中,创建一个倒计时欢迎页面是一种常见的用户交互设计,它可以为用户提供一种预期的等待体验,尤其是在应用启动时。在这个特定的项目中,"android studio倒计时三秒欢迎页面"是一个使用Android Studio...

    android倒计时程序

    本教程将基于提供的"android倒计时程序",探讨如何在Android平台上实现倒计时功能,并分享几种不同的样式以供初学者学习和实践。 首先,倒计时的基本原理是利用`CountDownTimer`类,这是Android SDK提供的一种计时...

    Android 倒计时实现源码.zip

    本篇将基于提供的"Android 倒计时实现源码.zip"来详细解析Android倒计时的实现原理及其在实际开发中的应用。 首先,`CountDownTimer`是Android SDK提供的一种定时器类,它允许开发者创建一个在指定的时间间隔后触发...

    Android 自定义倒计时控件

    可以使用`postInvalidate()`方法请求控件重绘,以确保UI与倒计时状态同步。 4. **属性动画与自定义属性** - 为了增加视觉效果,我们可以使用Android的属性动画API(Property Animation)来实现如数字滚动、颜色...

    安卓天气日历时间选择倒计时相关-Android倒计时CountTime.rar

    在这个名为"安卓天气日历时间选择倒计时相关-Android倒计时CountTime.rar"的压缩包中,很可能包含了与倒计时相关的Android代码示例,可能涉及到以下几个方面: 1. **倒计时类CountDownTimer**:这是Android SDK提供...

    Android 定时器+倒计时 仿淘宝秒杀

    倒计时是一种时间流逝的逆向展示方式,常用于创建紧迫感或引导用户在特定时间内完成操作,如秒杀活动中的抢购倒计时。在Android中,我们可以使用`CountDownTimer`类来实现这个功能。`CountDownTimer`提供了两个回调...

    Android 简单封装获取验证码倒计时

    - **Handler/Runnable**: 这是一种常见的异步处理方式,通过`postDelayed()`方法设置延迟执行的任务,每秒执行一次,更新倒计时状态。 - **CountDownTimer**: Android提供的一个内置定时器类,用于执行倒计时操作。...

    Android自定义DigitalClock控件实现商品倒计时

    然后,我们计算与倒计时结束的剩余时间,并根据结果更新文本。如果倒计时结束,会调用`timeEnd()`回调并移除视图,防止进一步的更新。 `CustomDigitalClock`还包含一个`setEndTime(long endTime)`方法,允许外部...

    android限时抢购,listview解决倒计时问题,复用。

    在Android开发中,限时抢购页面常常涉及到动态更新的倒计时显示,这通常与ListView的使用密切相关。ListView因其高效的数据展示能力而被广泛应用,但同时也存在一些挑战,如倒计时的正确显示和列表滚动时的卡顿问题...

    android倒计时控件2

    在Android开发中,倒计时控件是一种常用的组件,它能为用户展示有限时间内的动态剩余时间,例如验证码的有效期、限时优惠活动等。本文将深入探讨如何在Android中实现一个具有后台持续计时功能的倒计时控件,即使在...

    一个简单的android计时器

    本节将详细介绍如何创建一个简单的Android计时器。 首先,我们需要了解Android计时器的基础。在Android中,有两种主要的计时方式:`CountDownTimer`和`Handler`配合`Runnable`。本例中提到的"一个简单的android计时...

    Android 倒计时实现源码.zip源码资源下载

    然而,如果你下载的"Android 倒计时实现源码.zip"包含自定义的倒计时实现,可能有以下几种情况: 1. **线程安全**:原码可能实现了线程安全的倒计时,确保在多线程环境下也能正确工作。 2. **暂停与恢复**:源码...

    加载页倒计时界面

    在IT行业中,加载页倒计时界面是一种常见的用户体验设计元素,尤其在广告展示或视频播放等场景中。这种功能能够给用户带来明确的等待预期,同时提升产品整体的交互感和专业性。在这个主题中,我们将深入探讨加载页倒...

    Android验证码倒计时

    在Android应用开发中,验证码倒计时是一种常见的功能,它用于在用户请求获取验证码后,限制用户短时间内重复发送,以防止滥用服务。本教程将详细讲解如何在Android中实现一个验证码倒计时功能。 首先,我们需要理解...

    Android倒计时器

    本项目"Android倒计时器"聚焦于构建一个具备交互性与视觉效果的应用,它包含了以下几个关键知识点: 1. **Chronometer组件**:Chronometer是Android SDK提供的一种专门用于显示倒计时的UI控件。它能够实时更新显示...

    android倒计时控件

    在Android开发中,倒计时控件是一种常见的需求,它常用于实现各种功能,比如活动倒计时、验证码倒计时等。本篇将详细解析如何在Android中创建一个自定义的倒计时控件,以`AutoTimeTextView`为例进行讲解。 首先,...

    Android应用源码之带暂停功能倒计时TimeCountDown盒子适用-IT计算机-毕业设计.zip

    首先,`CountDownTimer`是Android SDK提供的一种用于执行倒计时操作的工具类。它允许开发者定义一个总时长以及每隔一段时间触发的回调方法。在这个源码中,`TimeCountDown`类可能是一个自定义的倒计时器实现,扩展了...

    Android 计时器

    在Android开发中,计时器(Chronometer)是一种常见的组件,用于显示已过去的时间或进行倒计时。在本篇文章中,我们将深入探讨Android Chronometer的相关知识点,包括其功能、用法、属性以及如何在实际应用中实现...

Global site tag (gtag.js) - Google Analytics