前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中延时任务与定时任务

Android中延时任务与定时任务

作者头像
码客说
发布2019-10-22 14:26:23
3.3K1
发布2019-10-22 14:26:23
举报
文章被收录于专栏:码客

延时任务

新线程延迟通知主线程

代码语言:javascript
复制
Handler myHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 0:
                mSwipeLayout.autoRefresh();
                break;
        }
        super.handleMessage(msg);
    }
};
new Thread(new Runnable() {
    public void run() {
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Message message = new Message();
        message.what = 0;
        myHandler.sendMessage(message); //告诉主线程执行任务
    }
}).start();

利用定时器TimerTask

代码语言:javascript
复制
TimerTask task = new TimerTask(){   
    public void run(){   
    //execute the task 
    }   
};
Timer timer = new Timer(); 
timer.schedule(task, delay);

Handler + postDelayed

代码语言:javascript
复制
new Handler().postDelayed(new Runnable(){  
    public void run() {  
    //execute the task
    }  
}, delay);

Handler + Message + sendMessageAtTime

代码语言:javascript
复制
Handler myHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 0:
                mSwipeLayout.autoRefresh();
                break;
        }
        super.handleMessage(msg);
    }
};

//发送消息
Message message = new Message();
message.what = 0;
myHandler.sendMessageAtTime(message, SystemClock.uptimeMillis() + 600);

Rxjava实现方式

需要的库

代码语言:javascript
复制
compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.trello:rxlifecycle:0.4.0'
compile 'com.trello:rxlifecycle-components:0.4.0'

Activity要继承RxAppCompatActivity

调用方式

代码语言:javascript
复制
Observable.timer(300 , TimeUnit.MILLISECONDS)
     .observeOn(AndroidSchedulers.mainThread())
     .compose(this.<Long>bindToLifecycle())
     .subscribe(new Action1<Long>() {
         @Override
         public void call(Long aLong) {

         }
     });

定时任务

定时任务的方式和上面的方式基本差不多

新线程延迟通知主线程

代码语言:javascript
复制
Handler handler = new Handler() {
   public void handleMessage(Message msg) {
       // 要做的事情
       super.handleMessage(msg);
   }
};
代码语言:javascript
复制
public class MyThread implements Runnable {
   @Override
   public void run() {
       while (true) {
           try {
               Thread.sleep(1000);// 线程暂停1秒,单位毫秒
               Message message = new Message();
               message.what = 1;
               handler.sendMessage(message);// 发送消息
           } catch (InterruptedException e) {

           }
       }
   }
}

开始定时任务

代码语言:javascript
复制
Thread myThread = new Thread(new MyThread());
myThread.start();

取消定时任务

代码语言:javascript
复制
myThread.interrupt();
try {
  myThread.join();
} catch (InterruptedException e) {
}

利用定时器TimerTask

代码语言:javascript
复制
private final Timer timer = new Timer();  
private TimerTask task;  
Handler handler = new Handler() {  
    @Override  
    public void handleMessage(Message msg) {  
        // TODO Auto-generated method stub  
        // 要做的事情  
        super.handleMessage(msg);  
    }  
};

初始化

代码语言:javascript
复制
task = new TimerTask() {  
    @Override  
    public void run() {  
        // TODO Auto-generated method stub  
        Message message = new Message();  
        message.what = 1;  
        handler.sendMessage(message);  
    }  
};

开始定时任务

代码语言:javascript
复制
timer.schedule(task, 2000, 2000);

取消定时任务

代码语言:javascript
复制
timer.cancel();

采用Handler的postDelayed(Runnable,long)方法

代码语言:javascript
复制
Handler handler=new Handler();  
Runnable runnable=new Runnable() {  
    @Override  
    public void run() {  
        //要做的事情  
        handler.postDelayed(this, 2000);  
    }  
};

开始定时任务

代码语言:javascript
复制
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.

取消定时任务

代码语言:javascript
复制
handler.removeCallbacks(runnable);

AlarmManager

利用AlarmManager,特定时刻广播指定意图,一般的简单任务不这么做

AndroidL开始repeat的周期必须大于60秒 所以短周期循环执行不建议使用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 延时任务
    • 新线程延迟通知主线程
      • 利用定时器TimerTask
        • Handler + postDelayed
          • Handler + Message + sendMessageAtTime
            • Rxjava实现方式
            • 定时任务
              • 新线程延迟通知主线程
                • 利用定时器TimerTask
                  • 采用Handler的postDelayed(Runnable,long)方法
                  • AlarmManager
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档