Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
程序员文章站
2022-05-16 12:02:38
作用:
1、定时执行某种功能
2、重复执行、定时重复执行、定次数执行某种功能
类别:
1、 thread(new runnable)
2、threa...
作用:
1、定时执行某种功能
2、重复执行、定时重复执行、定次数执行某种功能
类别:
1、 thread(new runnable)
2、thread()
3、timer
4、handler
·····
代码如下:
1、布局
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <button android:id="@+id/show_time" android:text="请选择一种启动方式" android:textsize="30dp" android:layout_width="match_parent" android:layout_height="100dp" /> <button android:id="@+id/timer_1" android:textallcaps="false" android:text="定时方式1(thread(new runnable))" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/timer_2" android:text="定时方式2(thread()) " android:textallcaps="false" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/timer_3" android:text="定时方式3(timer) " android:textallcaps="false" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/timer_4" android:text="定时方式4(handler) " android:textallcaps="false" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/clear" android:text="计时器清零 " android:layout_width="match_parent" android:layout_height="wrap_content" /> <textview android:layout_margin="10dp" android:text="方式3停止方式不同(因为timer一旦被cancel之后就废了,只有重新构造一个)\n停止:1、开启3 2、点击停止 3、再点击方式3" android:textallcaps="false" android:layout_width="match_parent" android:layout_height="wrap_content" /> </linearlayout>
2、实现定时功能
package com.example.leixiansheng.mytimers; import android.os.handler; import android.os.message; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import java.util.timer; import java.util.timertask; public class mainactivity extends appcompatactivity implements view.onclicklistener { private button timer_1, timer_2, timer_3, timer_4,clear, showtime; private timer timer; private timertask timertask; private int num = 0; //计数值 private boolean flog = true; //是否停止计时 private handler handler = new handler() { @override public void handlemessage(message msg) { super.handlemessage(msg); showtime.settext("点击我停止计时: " + msg.what); } }; //handler 方式定时循环 private handler handlertimer = new handler() { @override public void handlemessage(message msg) { super.handlemessage(msg); if (flog) { handlertimer.sendemptymessagedelayed(num++, 1000); } showtime.settext("点击我停止计时: " + msg.what); if(flog == false) { flog = true; } } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); timer_1 = (button) findviewbyid(r.id.timer_1); timer_2 = (button) findviewbyid(r.id.timer_2); timer_3 = (button) findviewbyid(r.id.timer_3); timer_4 = (button) findviewbyid(r.id.timer_4); clear = (button) findviewbyid(r.id.clear); showtime = (button) findviewbyid(r.id.show_time); timer_1.setonclicklistener(this); timer_2.setonclicklistener(this); timer_3.setonclicklistener(this); timer_4.setonclicklistener(this); clear.setonclicklistener(this); showtime.setonclicklistener(this); } @override public void onclick(view view) { switch (view.getid()) { case r.id.timer_1: method_1(); break; case r.id.timer_2: method_2(); break; case r.id.timer_3: method_3(); break; case r.id.timer_4: method_4(); break; case r.id.clear: num = 0; showtime.settext("请选择一种启动方式"); break; case r.id.show_time: flog = false; break; } } private void method_4() { new thread() { @override public void run() { super.run(); handlertimer.sendemptymessage(num++); } }.start(); } private void method_3() { //timer一旦被cancel之后就废了,只有重新构造一个。 if (flog == true) { timer = new timer(); timertask = new timertask() { @override public void run() { handler.sendemptymessage(num++); } }; /** * 第一个参数:任务 * 第二个参数:初始启动等待时间 * 第三个参数:时间间隔 */ timer.schedule(timertask, 0, 1000); } else { timer.cancel(); // 一定设置为null,否则定时器不会被回收 timer = null; flog = true; } //timer 暂停重启有问题(待改进) //timer一旦被cancel之后就废了,只有重新构造一个。 // if (flog == true) { // timertask = new timertask() { // @override // public void run() { // handler.sendemptymessage(num++); // } // }; // /** // * 第一个参数:任务 // * 第二个参数:初始启动等待时间 // * 第三个参数:时间间隔 // */ // timer.schedule(timertask, 0, 1000); // } else { // timer.cancel(); // flog = true; // } } private void method_2() { //new thread().start(); new thread() { @override public void run() { super.run(); while (flog) { handler.sendemptymessage(num++); try { thread.sleep(1000); } catch (interruptedexception e) { e.printstacktrace(); } } } }.start(); flog = true; } private void method_1() { // new thread(new runnable).start(); new thread(new runnable() { @override public void run() { while (flog) { handler.sendemptymessage(num++); try { thread.sleep(1000); } catch (interruptedexception e) { e.printstacktrace(); } } } }).start(); flog = true; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
上一篇: Javascript 仿歌词智能滚动代码