public void run() {
// TODO Auto-generated method stub
//要做的事情,这里再次调用此Runnable对象,以实现每两秒实现一次的定时器操作
handler.postDelayed(this, 2000);
//3,使用PostDelayed方法,调用此Runnable对象
handler.postDelayed(runnable, 2000);
//4,关闭此定时器,可以这样操作
handler.removeCallbacks(runnable);
//移除所有的消息
//handler.removeCallbacksAndMessages(null);
第二种:当然也可以通过Timer+TimerTask 来实现定时轮询
new Timer().schedule(new TimerTask() {
@Override
public void run() {
//TODO: 定时做某件事情
}, 5 * 1000, 5 * 1000);
java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。
每一个Timer仅对应唯一一个线程。
Timer不保证任务执行的十分精确。
Timer类的线程安全的。
第一种:Handler+Runnable实现方式实现循环执行定时//1,首先创建一个Handler对象Handler handler=new Handler(); //2,然后创建一个Runnable对像Runnable runnable=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub //要做的事情,这里再次调用此Runnable对象
Service 后台服务
循环
执行
因为我要写一个 智能厨房app,当关闭app后需要还 能收到数据,所以 我需要添加一个 后台服务
方法
使用了Service.
1,首先 第一步 新建 Service类;
public class MyService extends Service {
private Runnable runnable;
private Handler handler;
@Override
public IBinder onBind(Intent in
* 3.clockManafger
*------- 4.handler发送延时信息,实现
循环
-------------
handler.sendEmptyMessageDelayed(0,2000);//发送消息
private boolean isrunning=false;//判断是否自动滚动
pr...
一、采用Handler与线程的sleep(long)
方法
(不建议使用,java的实现方式)
二、采用Handler的postDelayed(Runnable, long)
方法
(最简单的
android
实现)
三、采用Handler与timer及TimerTask结合的
方法
(比较多的任务时建议使用)
android
里
有时需要
定时
循环
执行
某段代码,或者需要在某个时间点
执行
某段代码,这个需求大家第一时间会想到Timer对象,没错,不过我们还有更好的选择。
一、Timer 实现
定时
任务
Timer timer;
void onCreate(
android
:id="@+id/dingshis"
android
:layout_gravity="center_horizontal"
android
:layout_width="240dp"
android
:layout_height="48dp"
android
:text="
定时
"
android
:textSize=".
这篇文章使用AlarmManager实现了
Android
定时
后台
循环
任务。使用场景:项目需要app每隔一段时间就去服务端请求一次接口,从而更新本地保存的信息。
AlarmManager简介
AlarmManager是
Android
中
常用
的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent。
项目功能简介:
AlarmService模拟后台任务,
定时
发起广播
AlarmReceive启动AlarmService,达到循
1.首先设置
循环
private Handler handler = new Handler();
private Runnable task =new Runnable() {
public void run() {
handler.postDelayed(this,5*1000);//设置延迟时间,...
import
android
.support.v7.app.AppCompatActivity;
import
android
.os.Bundle;
import
android
.util.Log;
import java.util.Timer;
import java.util.TimerTask;
import
android
.app.AlarmManager;
import
android
.app.PendingIntent;
import
android
.app.Service;
import
android
.content.Intent;
import
android
.os.Handler;
import
android
.os.IBinder;
import
android
.os.Sy...
在
Android
中
循环
执行
网络请求,可以使用以下几种方式:
1. 使用 Handler 延时
循环
执行
:通过 Handler 的 `postDelayed()`
方法
和递归调用实现
循环
执行
网络请求的效果。代码示例:
```java
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
//
执行
网络请求
doNetworkRequest();
// 延时一段时间后再次
执行
mHandler.postDelayed(this, 1000); // 1 秒钟后再次
执行
// 开始
循环
执行
mHandler.post(mRunnable);
// 停止
循环
执行
mHandler.removeCallbacks(mRunnable);
2. 使用 Timer
定时
循环
执行
:通过 Timer 和 TimerTask 实现
循环
执行
网络请求的效果。代码示例:
```java
private Timer mTimer;
private TimerTask mTimerTask = new TimerTask() {
@Override
public void run() {
//
执行
网络请求
doNetworkRequest();
// 开始
循环
执行
mTimer = new Timer();
mTimer.schedule(mTimerTask, 0, 1000); // 每隔 1 秒钟
执行
一次
// 停止
循环
执行
mTimer.cancel();
3. 使用 RxJava 实现
循环
执行
:通过 RxJava 的 `interval()` 操作符实现
循环
执行
网络请求的效果。代码示例:
```java
private Disposable mDisposable;
private Observable<Long> mObservable = Observable.interval(1, TimeUnit.SECONDS);
// 开始
循环
执行
mDisposable = mObservable.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
//
执行
网络请求
doNetworkRequest();
// 停止
循环
执行
mDisposable.dispose();
以上三种方式都可以实现
循环
执行
网络请求的效果,根据实际情况选择适合自己的方式即可。需要注意的是,
循环
执行
网络请求可能会对手机的资源产生较大的消耗,因此要根据实际需求和手机性能进行调整。