** 按下 按钮 开始 循环, 松开 按钮 循环结束
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中实现定时器的四种方式 第一种方式利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); //delay为long,period为long:从现在起过delay毫秒...
Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的...
官方的例子用来实现定时器,突然觉得这是一个很神奇的事情,就搜集了一些资料,把我知道的实现计时器的几种方法写下来,给自己加深记忆,也分享给大家。 正文 我用到的几种实现定时器的类:Handler, Timer, Thread...
5.2 实现滑动的七种方法 91 5.2.1 layout方法 92 5.2.2 offset Left And Right()与offset Top And Bottom() 93 5.2.3 Layout Params 93 5.2.4 scroll To与scrollBy 94 5.2.5 Scroller 96 5.2.6 属性动画 ...
如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用 CountDownTimer 定时器简单封装下此效果,方便我们随时调用。 首页先在 attrs.xml 中定义下所需的几个属性: <resources> ...
无游戏道具,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,在玩普通模式的时候一开始...
本项目是一个钻石连连看的小游戏源码,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,...
alarmmanager 计时器,android自己的计时器,区别于timer,,包括在api19之前的两种方式,以及api19之后的两种(都是单次的),主要运用的也就是这几种。还有api19后的重复执行的实现。(结果在应用中用文字表述了)...
|--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量不够时) |--网络post提交查询请求 |--网络之HttpClient的get和post用法 |--网络之判断网络状态是否可用 |--网络之设置apn |--...
Power Nap Alarm 旨在为忙碌的人们提供一种快速且极其简单的方法,只要他们有几分钟的空闲时间,就可以挤入一个小睡片刻。 简单的卡片界面设计得尽可能简单,只需点击一下即可设置警报。 主界面 为简单起见,有一个...
与屏幕的这种物理接触是使用安装在探头上的加速度计来计时的。 (滚动)。 -使用光电二极管检测屏幕是黑屏还是白屏。 。 MIDI输入和输出延迟可以或下载适用于Android的WALT应用程序,或在下载该应用程序; iOS应用...
注意 该存储库包含用于最终目标...如果您是Android Studio程序员,则有几种方法可以下载此存储库。 请注意,如果您使用Blocks或OnBot Java Tool对机器人进行编程,则无需下载此存储库。 如果您是git用户,则可以克隆
几种测试方法。 有“自检”,“使用变体测试”,“拼写检查”。 通过TTS的文本发音。 您可以选择提问和回答的语言,并自动说出它们。 隐藏问题文本以刺激听力技能的提高,这在外语学习中非常有用。 卡倒置。 ...
钻石消消看小游戏源码,游戏有普通模式、计时模式、无尽模式三种游戏模式,普通模式就是一局基类特定消除数就可以到下一局,计时模式使用倒计时来控制每局时间,无尽模式没玩过。自带一个高分排行榜,在玩普通模式的...
客户端套接字有几种不同的配置。 我使用的匹配对是 ServerSocket 和 ClientSocketOne.java。 我将它们放在一起用于 Android 测试目的,因此它们不是非常健壮的应用程序。 小心关闭插座,以免挂起任何东西。
支持MP3, WMA, OGG, wav文件以及音频CD,并且可以从CD转录为MP3, WMA, OGG格式,还带有烧录音乐CD功能,至于MP3, WMA, OGG, WAV几种格式的互转更是不在话下。软件可以外接winamp播放,也可以使用自带的播放器,支持...