当前位置: 移动技术网 > IT编程>移动开发>Android > Android中使用定时器的三种方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

仙剑奇侠传3全集下载,顽皮仙子异世游,千年神工任务

本文实例为大家分享了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定时功能》进行学习。

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网