Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用
作用:
1、定时执行某种功能
2、重复执行、定时重复执行、定次数执行某种功能
类别:
1、 Thread(new Runnable)
2、Thread()
3、Timer
4、Handler
·····
代码如下:
1、布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <? 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、实现定时功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | 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 ; } } |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
- android如何取得本地通讯录的头像的原图的实现代码
- android的ListView点击item使item展开的做法的实现代码
- Android单一实例全局可调用网络加载弹窗
- Android带刷新时间显示的PullToRefresh上下拉刷新
- Android中LayoutInflater.inflater()的正确打开方式
- Android加载loading对话框的功能及实例代码(不退出沉浸式效果)
- Android实现动态添加标签及其点击事件
- Android仿微信标签功能
- Android实现外部唤起应用跳转指定页面的方法
- Android中buildToolVersion与CompileSdkVersion的区别
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Android Studio 全屏沉浸式透明状态栏效果的实现
这篇文章主要介绍了Android Studio 全屏沉浸式透明状态栏效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题
这篇文章主要介绍了解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03
最新评论