您的位置 首页 java

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<Long>() {
                    @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<Long>() {
                    @Override
                    public void accept(Long aLong) {
                        //todo 每隔5s执行一次
                    }
                }, throwable -> {

                });
    }

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

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

文章来源:智云一二三科技

文章标题:Android中的定时任务

文章地址:https://www.zhihuclub.com/179713.shtml

关于作者: 智云科技

热门文章

网站地图