仙剑奇侠传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定时功能》进行学习。
以上就是定时器使用方法的全部内容,希望能给大家一个参考,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android Manifest中meta-data扩展元素数据的配置与获取方式
Android实现获取meta-data和build.gradle的值
Android获取清单文件中的meta-data,解决碰到数值为null的问题
解决webview 第二次调用loadUrl页面不刷新的问题
解决Android WebView拦截url,视频播放加载失败的问题
Android webview加载https链接错误或无响应的解决
网友评论