本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下

图示:

因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI

第一种方法:Thread.sleep();方法

Runnable runnable = new Runnable() {

@Override

public void run() {

while (true) {

mHandler.sendEmptyMessage(0);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

new Thread(runnable).start();

}

第二种方法:Handler的postDelay()方法

final Runnable runnable = new Runnable() {

@Override

public void run() {

if (isStart2) {

mHandler.sendEmptyMessage(0);

mHandler.postDelayed(this, 1000);

}

}

};

mHandler.postDelayed(runnable, 1000);

}

第三种:Timer和TimerTask

private Timer timer = new Timer();

private TimerTask timerTask = new TimerTask() {

@Override

public void run() {

mHandler.sendEmptyMessage(0);

}

};

timer.schedule(timerTask, 1000, 1000);

总的来说第三种方法最方便,不易出错,第二种容易忘记添加出发事件.

贴一下完整代码:

布局文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.brioal.timertest.MainActivity">

android:id="@+id/main_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="100dp"

android:text="Hello World!" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@id/main_tv"

android:layout_marginTop="100dp"

android:gravity="center"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_margin="5dp"

android:onClick="Method1"

android:text="方法1:Thread"

android:textAllCaps="false" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_margin="5dp"

android:onClick="Method2"

android:text="方法2:Handler"

android:textAllCaps="false" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_margin="5dp"

android:onClick="Method3"

android:text="方法3:Task"

android:textAllCaps="false" />

MainActivity

package com.brioal.timertest;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.TextView;

import java.text.SimpleDateFormat;

import java.util.Timer;

import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

private TextView mTv;

private Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

//收到消息后显示当前时间

long current = System.currentTimeMillis();

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

String time = dateFormat.format(current);

mTv.setText(time);

}

};

private Timer timer = new Timer();

private TimerTask timerTask = new TimerTask() {

@Override

public void run() {

mHandler.sendEmptyMessage(0);

}

};

private Thread thread1;

private boolean isStart1 = false;

private boolean isStart2 = false;

private boolean isStart3 = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTv = (TextView) findViewById(R.id.main_tv);

}

//Thread方法

public void Method1(View view) {

Runnable runnable = new Runnable() {

@Override

public void run() {

while (isStart1) {

mHandler.sendEmptyMessage(0);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

if (isStart1) {

isStart1 = false;

} else {

isStart1 = true;

thread1 = new Thread(runnable);

thread1.start();

}

}

public void Method2(View view) {

final Runnable runnable = new Runnable() {

@Override

public void run() {

if (isStart2) {

mHandler.sendEmptyMessage(0);

mHandler.postDelayed(this, 1000);

}

}

};

if (isStart2) {

isStart2 = false;

} else {

mHandler.postDelayed(runnable, 1000);

isStart2 = true;

}

}

public void Method3(View view) {

if (isStart3) {

timer.cancel();

isStart3 = false;

} else {

timer.schedule(timerTask, 1000, 1000);

isStart3 = true;

}

}

}

总结完了,完整Github地址:TimerTest

更多内容请点击专题《java定时功能》进行学习。

以上就是定时器使用方法的全部内容,希望能给大家一个参考,也希望大家多多支持脚本之家。

android全局计时_Android中使用定时器的三种方法相关推荐

  1. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  2. 在JavaScript中重复字符串的三种方法

    In this article, I'll explain how to solve freeCodeCamp's "Repeat a string repeat a string" ...

  3. 在JavaScript中反转字符串的三种方法

    This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...

  4. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  5. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法

    Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...

  6. c++语言定义排序函数,关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必 ...

  7. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

  8. 【在PowerPoint中插入视频的三种方法】

    为了能更好地帮助大家合理地在PowerPoint课件中插入和播放视频文件, 在PowerPoint中插入视频的三种方法 ,本文特向大家介绍PowerPoint中插入和处理视频的三种方法. 直接播放视频 ...

  9. LaTeX 中处理参考文献的三种方法总结

    LaTeX 中处理参考文献的三种方法总结 方法一:用BibLaTeX处理 分成如下四步: 第一步:制作生成bib文件: 第二步:在导言区需要加入biblatex宏包: \usepackage[格式控制 ...

最新文章

  1. 成为 Linux 终端高手的七种武器
  2. MediatR 知多少
  3. django开发商城(提供初始数据,商城首页及购物车)
  4. mysql还是mdb2_mysql两种表存储结构myisam和innodb的性能比较测试
  5. 软件工程概论第二周 开课作业
  6. 在PyCharm命令行中使用conda数学库的方法
  7. goc 介绍与源代码分析
  8. 在windows 2008 R2上无法运行vc 2015的程序,显示缺少api-ms-win-crt-string-|1-1-0.dll的解决
  9. mysql书单推荐_MySQL零基础入门推荐书籍?
  10. 计算机系单身率排行榜,2020中国高校单身率排行榜出炉!附:单身率特别高的专业...
  11. java 求pi_计算PI(π)的几种方法
  12. 1114 计算营业额
  13. 荣耀路由2 虚拟服务器,华为荣耀路由器2怎么设置? | 192路由网
  14. excel通过合并单元格“增加行高”(大于最大行高409)
  15. 蔡萍:深耕半导体行业二十年,复旦MBA“朋友圈”成智囊团
  16. 在天翼云服务器部署程序不能被外网访问的问题
  17. 如何对matlab中的数组取平均值
  18. 网站被黑,通过百度/搜狗等搜索关键词访问跳转到其他网站怎么办?
  19. matlab int 32,Matlab数字
  20. ItemCreated和ItemDataBound事件的区别

热门文章

  1. tensorflow之saver
  2. LED显示驱动(五):视频设备显示驱动调试步骤总结
  3. Android 谷歌巨头,国际巨头强势助攻,谷歌新系统开始提速,华为的对手不止一个...
  4. pythonopencv算法_OpenCV3-Python基于Kalman和CAMShift算法应用
  5. windows系统bat批处理 arp扫描一个网段的IP地址
  6. ngnix学习(二)ngnix常用命令
  7. php 405,php Restler 405 Method Not Allowed 问题解决啦,restlerallowed_PHP教程
  8. java requestparams_详解在Spring MVC中使用注解的方式校验RequestParams
  9. 阿里巴巴2020首发136道Java高级岗面试题(含答案)
  10. python3 redis长链接超时_Python3 连接Redis字符串和字节问题探究