方法一

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之多线程工作-AsyncTask与handler

转载于:https://www.cnblogs.com/mixer/archive/2011/10/25/2448004.html

Android实现计时与倒计时的几种方法相关推荐

  1. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  2. Android中用GridView实现九宫格的两种方法(转)

    Android中用GridView实现九宫格的两种方法 http://blog.csdn.net/shakespeare001/article/details/7768455 1.传统办法:实现一个继 ...

  3. android onclick方法吗,Android中button的onClick事件几种方法

    Android中button的onClick事件几种方法 发布时间:2020-09-03 02:36:31 来源:脚本之家 阅读:100 作者:水桶前辈 Android中button的onClick事 ...

  4. Android sim卡清空,Android手机卡了?用这几种方法变回来...

    原标题:Android手机卡了?用这几种方法变回来... 2017年已经过去了三个多月,各大手机厂商也纷纷亮出了自家的新年新品,单看内存,几乎已经全面升级到4GB以上,6GB内存也成为中高端手机的标配 ...

  5. 修改android的wifi客户端名称的两种方法

    修改android的wifi客户端名称的两种方法 手机连接到无线路由时,在dhcp的客户端列表里面是这样的名称"android-89425253e5de3a2",这就是安卓手机的系 ...

  6. android程序设计拍照,Android编程实现拍照功能的2种方法分析

    本文实例讲述了Android编程实现拍照功能的2种方法.分享给大家供大家参考,具体如下: Android系统的照相功能,已实现2种方法,可供大家参考: 1. 调用系统摄像头来拍照 首先,找到Andro ...

  7. android自动隐藏虚拟键,Android 隐藏底部虚拟键的两种方法

    方法一  滑动屏幕 可重新显示出来 protected void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 1 ...

  8. Android数据存储和读取的三种方法

    Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...

  9. Android手机获取IP地址的两种方法

    Android手机获取IP地址的两种方法 本文章讲解了WIFI和GPRS两种情况下获取手机IP地址的方法 1.使用WIFI 1,首先设置用户权限 AndroidManifest.xml添加: < ...

最新文章

  1. 【lidar】3D目标检测PointPillars:论文解读、代码解读、部署实现(1)
  2. CentOS 7安装gitlab服务器
  3. 小哥质疑谷歌顶会论文有错,并且拿出了复现代码来证明
  4. LightOJ 1348 Aladdin and the Return Journey
  5. 通俗易懂的讲解一下Java的代理模式
  6. centos7.6成功安装nerdtree插件
  7. 0318互联网新闻 | Snapchat下月进军游戏平台;阿里巴巴将上线二哈智能防骚扰电话的应用程序...
  8. 下面关于“栈”的描述,正确的是( )
  9. 过拟合与模型调优(part2)--重抽样技术
  10. 无限重启_三星蓝光播放器出现无限自动重启BUG,涉及不少用户及不同型号
  11. python的sorted用法
  12. VS2010打开就自动关闭问题解决
  13. 互联网时代的了解和未来的预期_互联网时代的四个特点你了解多少?
  14. Java 将PDF转为OFD
  15. jmeter配置远程运行
  16. 矩阵中的entries是什么
  17. 程序退出,段错误segment default问题定位
  18. 高德地图坐标转换问题
  19. 点击超链接实现文件下载而不是打开
  20. SAP 创建销售订单-用外部给号的方法步骤

热门文章

  1. html ssm写用户登陆验证,ssm 使用token校验登录的实现
  2. c char转int_C/C++ 各数据类型占用字节数
  3. 从零开始刷Leetcode——数组(448.485.509)
  4. 14英寸电脑长宽多少_华为MateBook 14 2020款 14英寸轻薄笔记本王者升级
  5. dom4j实现为list添加父节点_最大堆的实现与原理
  6. Error: cannot allocate vector of size 88.1 Mb问题
  7. Google安全团队对Android安全的认识
  8. 网络爬虫--抓取图片_vortex_新浪博客
  9. matlab读取excel第一列,读取excel中的数据把第一列相同的所有行数据输出成一个excel...
  10. 三阶段提交(Three-phase commit)