android全局计时_Android中使用定时器的三种方法
本文实例为大家分享了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中使用定时器的三种方法相关推荐
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- 在JavaScript中重复字符串的三种方法
In this article, I'll explain how to solve freeCodeCamp's "Repeat a string repeat a string" ...
- 在JavaScript中反转字符串的三种方法
This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...
- mysql添加临时索引_mysql 中添加索引的三种方法
在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...
- centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法
Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...
- c++语言定义排序函数,关于C++中定义比较函数的三种方法小结
C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必 ...
- java 终止方法_Java中终止线程的三种方法
Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...
- 【在PowerPoint中插入视频的三种方法】
为了能更好地帮助大家合理地在PowerPoint课件中插入和播放视频文件, 在PowerPoint中插入视频的三种方法 ,本文特向大家介绍PowerPoint中插入和处理视频的三种方法. 直接播放视频 ...
- LaTeX 中处理参考文献的三种方法总结
LaTeX 中处理参考文献的三种方法总结 方法一:用BibLaTeX处理 分成如下四步: 第一步:制作生成bib文件: 第二步:在导言区需要加入biblatex宏包: \usepackage[格式控制 ...
最新文章
- 成为 Linux 终端高手的七种武器
- MediatR 知多少
- django开发商城(提供初始数据,商城首页及购物车)
- mysql还是mdb2_mysql两种表存储结构myisam和innodb的性能比较测试
- 软件工程概论第二周 开课作业
- 在PyCharm命令行中使用conda数学库的方法
- goc 介绍与源代码分析
- 在windows 2008 R2上无法运行vc 2015的程序,显示缺少api-ms-win-crt-string-|1-1-0.dll的解决
- mysql书单推荐_MySQL零基础入门推荐书籍?
- 计算机系单身率排行榜,2020中国高校单身率排行榜出炉!附:单身率特别高的专业...
- java 求pi_计算PI(π)的几种方法
- 1114 计算营业额
- 荣耀路由2 虚拟服务器,华为荣耀路由器2怎么设置? | 192路由网
- excel通过合并单元格“增加行高”(大于最大行高409)
- 蔡萍:深耕半导体行业二十年,复旦MBA“朋友圈”成智囊团
- 在天翼云服务器部署程序不能被外网访问的问题
- 如何对matlab中的数组取平均值
- 网站被黑,通过百度/搜狗等搜索关键词访问跳转到其他网站怎么办?
- matlab int 32,Matlab数字
- ItemCreated和ItemDataBound事件的区别
热门文章
- tensorflow之saver
- LED显示驱动(五):视频设备显示驱动调试步骤总结
- Android 谷歌巨头,国际巨头强势助攻,谷歌新系统开始提速,华为的对手不止一个...
- pythonopencv算法_OpenCV3-Python基于Kalman和CAMShift算法应用
- windows系统bat批处理 arp扫描一个网段的IP地址
- ngnix学习(二)ngnix常用命令
- php 405,php Restler 405 Method Not Allowed 问题解决啦,restlerallowed_PHP教程
- java requestparams_详解在Spring MVC中使用注解的方式校验RequestParams
- 阿里巴巴2020首发136道Java高级岗面试题(含答案)
- python3 redis长链接超时_Python3 连接Redis字符串和字节问题探究