服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式

Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式

2022-08-31 16:42Mr_Leixiansheng Android

今天小编就为大家分享一篇关于Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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;
  }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/Mr_Leixiansheng/article/details/68064834

延伸 · 阅读

精彩推荐