Android中的定时任务

简单介绍一下本文出现的名词:

Handler:可接受子线程发送的消息数据, 主要用来主线程更新UI。

用Java线程来实现

 Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //todo

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        new Thread(new HandleThread()).start();
    }

    public class HandleThread implements Runnable {
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Message message = new Message();
                message.what = 1;
                mHandler.sendMessage(message);
            }
        }
    }

用Android原生API实现


    private Timer mTimer = new Timer();
    private TimerTask mTimerTask;
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //todo

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        mTimerTask = new TimerTask() {
            @Override
            public void run() {
                Message message = new Message();
                message.what = 1;
                mHandler.sendMessage(message);
            }
        };
        mTimer.schedule(mTimerTask, 2000, 2000);
    }

    /**
     * 停止计时器
     */
    public void cancelTimer() {
        mTimer.cancel();
    }

在我的项目中,上面两种方式好少用到了,现在比较常用的是RxJava2的定时器

 private Disposable mDisposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        mDisposable = Observable.timer(5000, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Long aLong) {
                        //todo 5秒后执行
                    }
                }, throwable -> {

                });
    }

    /**
     * 停止计时
     */
   public void cancel() {
        if (mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }
  private Disposable mDisposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        mDisposable = Observable.interval(5000, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Long aLong) {
                        //todo 每隔5s执行一次
                    }
                }, throwable -> {

                });
    }

    /**
     * 停止计时
     */
    public void cancel() {
        if (mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }

RxJava定时任务提供了很多方便的API就不一一写了

展开阅读全文

页面更新:2024-03-14

标签:计时器   定时器   线程   主线   名词   本文   常用   消息   简单   方式   项目   数据   数码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top