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);

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

贴一下完整代码:

布局文件

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 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"> <TextView 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!" /> <LinearLayout 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"> <Button 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" /> <Button 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" /> <Button 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" /> </LinearLayout> </RelativeLayout>

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定时功能》进行学习。

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

时间: 2024-09-08 13:19:54

Android中使用定时器的三种方法的相关文章

Android中使用定时器的三种方法_Android

本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第一种方法:Thread.sleep();方法 Runnable runnable = new Runnable() { @Override public void run() { while (true) { mHandler.sendEmptyMessage(0); try { Thread.sl

Android中去掉标题栏的几种方法(三种)_Android

1.在java代码中 (SplashActivity继承AppCompatActivity时无效) 2.在manifest.xml中改Theme 3.先在style.xml中自定义style <?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="notitle"> <item name="android:windowNo

Android中去掉标题栏的几种方法(三种)

1.在java代码中 (SplashActivity继承AppCompatActivity时无效) 2.在manifest.xml中改Theme 3.先在style.xml中自定义style <?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="notitle"> <item name="android:windowNo

excel表格中隔行选取的三种方法

  excel表格中隔行选取的三种方法          有一个excel表格,需要隔N行选取.可能是隔一行,也可能是隔2行.3行. 常见的隔行选取有两种方法: 一.按ctrl键不松用鼠标逐行选取.如果需要选取的行数多,会累死人的. 二.在辅助设置公式或输入字符 - 设置筛选模式 - 筛选 - 选取 - 取消筛选模式.如果是隔列选取,这种方法就不能用了. 除了以上两种外,本文小编新发现一种新的隔行选取方法,估计绝大部分同学都没见过. 步骤1:在H3中输入公式 =A3:F3,再选取H2:H3向下复

实现PPT中局部虚化效果的三种方法

实现PPT中局部虚化效果的三种方法   下面请看实现PPT中局部虚化效果的三种方法 方法一.图片复制两份,选择图片,在格式中选择虚化,具体方法如下图所示. 方法二.用美图秀秀打开图片,在美化里面选择"背景虚化",具体方法如下图所示. 方法三.理论上讲与上面两个是重叠的,但分开将更容易理解,具体操作方法见下图. 局部虚化效果如下图所示.

JavaScript中定义函数的三种方法

 这篇文章主要介绍了JavaScript中定义函数的三种方法,本文直接给出代码实现,同时给出了构造函数的相关知识,需要的朋友可以参考下     在JavaScript的世界里,定义函数的方法多种多样,这正是JavaScript灵活性的体现,但是正是这个原因让初学者摸不着头脑,尤其对于没有 语言基础的同学.正所谓条条大道通罗马,但是如果道路太多,会让行路者不知所措,因为不知道走那条路才是正途,呵呵,废话一大篇,闲言少叙,先看代码: 代码如下: /*第一种方法,使用function语句,格式如下*/

Android中杀进程的几种方法 (1) - killBackgroundProcesses

Android中杀进程的几种方法 (1) - killBackgroundProcesses ActivityManager中提供了几种方式来杀进程,比如有forceStopPackage.removeTask.killBackgroundProcesses等. 下面我们就来看看它们的背后都做了些什么. removeTask 我们之前已经写了一篇<关于Android的浅杀>来介绍这个方法的变迁,大家可以回忆一下找找感觉. 复习一下removeTask的好处是,相对后面几个,它的逻辑要简单得多.

C#在Winform中改变Textbox高度三种方法

原文 C#在Winform中改变Textbox高度三种方法 最近在做C# Winform项目,需要有一个能动态调整大小的Textbox,并且要是单行的.试了几次,单行模式的Textbox不能直接改高度.于是搜索了一下,整理出几个改变高度的方法. 1.将Textbox改为多行模式,设置MutliLine属性为True,然后屏蔽Enter键. private void txtTest_KeyDown (object sender, KeyEventArgs e) { if ((int)e.KeyCo

Word文档在方框中打勾的三种方法

文档在方框中打勾的三种方法-word文档中方框内打勾"> 方法一 点击"插入→符号→其他符号",打开"符号"窗口,在"子集"处选中"数学运算符",然后选中"√",点击"插入"按钮即可.再选中"√",在"开始"菜单中"字体"中点击"带圈字符○字"工具,打开带圈字符窗口,选择"□&quo