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

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

(0)

相关推荐

  • Android 实现定时器的四种方式总结及实现实例

    Android中实现定时器的四种方式 第一种方式利用Timer和TimerTask 1.继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次. schedule方法有三个参数 第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务: 第二

  • Android定时器Timer的停止和重启实现代码

    本文介绍了Android定时器Timer的停止和重启实现代码,分享给大家,具体如下: 7月份做了一个项目,利用自定义控件呈现一幅动画,当时使用定时器来控制时间,但是当停止开启时总是出现问题.一直在寻找合理的方法解决这个问题,一直没有找到,最近终于找到了合理的方法来解决这个问题. 大家如何查询有关资料,一定知道timer,timertask取消的方式是采用Timer.cancel()和mTimerTask.cancel(),可是大家发现这种发式取消后,再次开始timer时,会报错 FATAL EX

  • Android 三种实现定时器详解及实现方法

    方法一:Handler+Thread package com.xunfang.handerDemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; /** * handler定时器 * * @author Smalt * */ public class Hande

  • 详解Android实现定时器的几种方法

    前言 这几天正在看Android官方的开发文档,里面有很多很值得思考的开发建议,有时间的朋友可以去看一下(官方是英文文档,如果看不懂可以通过浏览器插件翻译对比着看,还是很方便的). 其中一篇课程提到了AlarmManager,这个类之前仅仅是了解这是一个闹钟的管理器,如果要是做一些胜过提醒.闹钟之类的软件都需要用到.官方的例子用来实现定时器,突然觉得这是一个很神奇的事情,就搜集了一些资料,把我知道的实现计时器的几种方法写下来,给自己加深记忆,也分享给大家. 正文 我用到的几种实现定时器的类:Ha

  • Android三种实现定时器的方法

    方法一.使用Handler和Thread(线程)实现定时器 复制代码 代码如下: package com.xunfang.handerDemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class HanderDemoActivity exte

  • Android控件Chronometer定时器的实现方法

    Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始.默认情况下它会显示在当前定时器的值的形式"分:秒"或"H:MM:SS的",或者可以使用的Set(字符串)格式的定时器值到一个任意字符串 1.重要属性 android:format:定义时间的格式如:hh:mm:ss 2.重要方法 setBase(long base):设置倒计时定时器 setFormat(String format)

  • Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的list进行排序,在TimerTask中执行不会阻塞子线程,常常与handler结合使用,在处理完复杂耗时的操作后,通过handler来更新UI界面. timer.schedule(task, delay,period); task: Time

  • 基于Android中实现定时器的3种解决方法

    在Android开发中,定时器一般有以下3种实现方法:一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法下面逐一介绍:一.采用Handle与线程的sleep(long)方法Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释.1. 定义一个Handler类,用

  • Android实现定时器的3种方法

    在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法 二.采用Handler的postDelayed(Runnable, long)方法 三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释. 1. 定义一个Han

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

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

  • 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获取文字高度的三种方法

    前言 本文是对获取文字高度整理和总结,参考资料源自 statcoverflow的一个回答.具体参看下面的参考链接 获取文字高度的三个方法 paint.getTextBounds(String text, int start, int end, Rect bounds) paint.getFontMetrics() StaticLayout 1 paint.getTextBounds(String text, int start, int end, Rect bounds) 参数解释 text :

  • 关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必须要知道集合中的对象,那个在前那个在后.因此,学会如何定义比较方法是非常重要的. C++模板库的许多容器需要相关类型有序,例如set<T> 和priority_queue<T>. 这篇文章旨在告诉大家如何为一个类定义一个排序方法,以便在STL容器或者方法中使用. 作为一个C++程序员,

  • vue中锚点的三种方法

    第一种: router.js中添加 mode: 'history', srcollBehavior(to,from,savedPosition){ if(to.hash){ return { selector:to.hash } } } 组件: <template> <div> <ul class="list"> <li><a href="#1" rel="external nofollow"

  • jQuery中each遍历的三种方法实例分析

    本文实例讲述了jQuery中each遍历的三种方法.分享给大家供大家参考,具体如下: 1.选择器+遍历 $('div').each(function (i){ //i就是索引值 //this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function (index,domEle){ //index就是索引值 //domEle 表示获取遍历每一个dom对象 }); 3.更适用的遍历方法 1)先获取某个集合对象 2)遍历集合对象的每一个元素 var d=$(

  • python中实现栈的三种方法

    栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括 empty() – 返回栈是否为空 – Time Complexity : O(1) size() – 返回栈的长度 – Time Complexity : O(1) top() – 查看栈顶元素 – Time Complexity : O(1) push(g) – 向栈顶添加元素 – Time Complexity : O(1) pop() – 删除栈顶元素 – Time

  • 详解JavaScript中分解数字的三种方法

    本文基于免费代码营基本算法脚本"分解数字" 在数学中,非负整数n的阶乘可能是一个棘手的算法.在本文中,我将解释这种方法,首先使用递归函数,第二种使用而循环,第三种使用以循环. 算法挑战 返回提供的整体的阶乘. 如果整体用字母n表示,则阶乘是所有小于或等于n的正整数的乘积. 阶乘经常用简写符号n!表示! 例如:5!= 1 * 2 * 3 * 4 * 5 = 120 function factorialize(num) { return num; } factorialize(5); 提供

  • Android读取服务器图片的三种方法

    Android链接服务器获取图片在此提供三种方法,已通过验证,无误. 方法一: public static Bitmap getImage(String path){ try { HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); System.out.println

  • iOS开发定时器的三种方法分享

    前言 在开发中,很多时候我们需要用到定时器实时刷新某个数值.这个时候我们就需要用到定时器,这里,我为大家推荐三种方法,分别是:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法.希望能帮到大家. 一.NSTimer(一般用于定时的更新一些非界面上的数据) 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:

随机推荐