Android开发:详解定时器的三种实现方法
需积分: 10 40 浏览量
更新于2024-09-11
2
收藏 31KB DOCX 举报
"本文将详细介绍Android开发中定时器的三种实现方式,包括Handler与线程的sleep(long)方法、Handler的postDelayed(Runnable,long)方法以及Handler与timer及TimerTask结合的方法。"
在Android应用程序开发中,定时任务是常见的需求,例如更新UI、定期发送数据或者执行周期性操作。下面我们将详细探讨这三种实现定时器的方法。
一、Handler与线程的sleep(long)方法
1. 首先,创建一个Handler实例,它负责处理发送到主线程的消息。Handler中定义了`handleMessage()`方法,用于处理接收到的消息。
```java
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 执行定时任务的相关操作
super.handleMessage(msg);
}
};
```
2. 然后,创建一个实现了Runnable接口的线程类,线程内部使用`Thread.sleep(10000)`来使线程暂停10秒,并通过`handler.sendMessage(message)`向Handler发送消息。
```java
public class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10000);
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
3. 最后,在需要启动定时器的地方,创建并启动新线程:
```java
new Thread(new MyThread()).start();
```
这种方法简单易懂,但需要注意的是,`Thread.sleep()`会使当前线程进入休眠状态,可能导致UI不响应,因此通常不推荐在主线程中使用。
二、Handler的postDelayed(Runnable,long)方法
1. 这种方法更简洁,不需要创建额外的线程。我们依然创建一个Handler,然后定义一个Runnable对象。
```java
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
// 执行定时任务的相关操作
// 重新调度任务
handler.postDelayed(this, 10000);
}
};
```
2. 在需要启动定时器的地方,调用Handler的`postDelayed()`方法,传入Runnable对象和延迟时间(以毫秒为单位)。
```java
handler.postDelayed(runnable, 10000);
```
这种方法会将Runnable对象添加到主线程的消息队列中,到达指定时间后执行Runnable的`run()`方法,同时自动重置定时器。优点是它是在主线程中执行,不会阻塞UI。
三、Handler与timer及TimerTask结合的方法
1. 使用`java.util.Timer`和`java.util.TimerTask`可以创建更灵活的定时任务,它们允许设置精确的定时和重复执行。
```java
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// 执行定时任务的相关操作
// 更新Handler的消息
handler.sendEmptyMessage(1);
}
};
```
2. 设置定时器的调度,例如每隔10秒执行一次任务:
```java
timer.schedule(timerTask, 0, 10000);
```
这种方法适合需要精确控制定时任务执行时间和频率的情况,但请注意,`TimerTask`的执行并不保证在准确的时间点,而是尽量接近设定的时间。
总结来说,选择哪种定时器实现方式取决于具体需求。Handler结合线程的sleep方法适用于简单场景,postDelayed方法更适合在主线程中执行,而Handler与Timer的组合则提供了更精细的定时控制。在实际开发中,根据项目需求和性能考虑选择合适的方法。
738 浏览量
555 浏览量
686 浏览量
696 浏览量
2011-06-23 上传
392 浏览量
1765 浏览量
587 浏览量
xxlvnn
- 粉丝: 0
- 资源: 5
最新资源
- CSharp Language Specification 3.0 CN.doc
- Thinking in C++ 2nd edition Volume 2: Standard Libraries & Advanced Topics
- 网站制作项目的报价参考格式。
- Thinking in C++, Volume 1, 2nd Edition
- 实用最优化的搜索算法
- 第二章信息系统的开发.ppt(我整理的教学课件)
- LoadRunnerManual 帮助文件
- JAVA新手须知的常识
- ModalMaker中文手册
- 串口通讯各种编程大全
- [eBook] A Guide to MATLAB for Beginners and Experienced Users - B.R.Hunt,R.L.Lipsman,J.M.Rosenberg - (Cambridge University Press)
- 数据结构(内容很全很容易学习的一本书)
- GWT学习笔记,个人学习心得
- Linux内核模块和驱动的编写
- windows-powershell-in-action
- JSF标签全解释 `