华域联盟 Andriod Android两种轮询的实现方法

Android两种轮询的实现方法

Android 两种轮询的简单写法,供大家参考,具体内容如下

public void startPolling() {
 subscriber = Observable.interval(0, POLLING_INTERVAL, TimeUnit.MILLISECONDS).
   doOnNext(new Action1<Long>() {
    @Override
    public void call(Long aLong) {
     doPolling().
       subscribeOn(Schedulers.io()).
       observeOn(AndroidSchedulers.mainThread()).
       subscribe(new Subscriber<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
         Log.d(TAG, "onError");
        }

        @Override
        public void onNext(String response) {
         handleResponse(response);
        }
       });
    }
   }).subscribe();
}

public void stopPolling() {
 if (!subscriber.isUnsubscribed()) {
  subscriber.unsubscribe();
 }
}

private Observable<Param> doPolling() {
 return Observable.create(new Observable.OnSubscribe<Param>() {
   @Override
   public void call(Subscriber<? super Param> subscriber) {
    //do work
    subscriber.onNext(response);
    subscriber.onCompleted();
   }
  });
}

在Activity的生命周期里分别调用start和stop方法,解除轮询绑定,避免内存泄漏。

其它简单的轮询方法还有利用handler的postDelay机制实现

@Override
public void handleMsg(Message msg) {
 switch (msg.what) {
  case MSG_POLLING:
   doPolling(false);
   break;
  ...
  ...
 }
}

private void doPolling(Boolean isFirst) {
 if(isFirst) {
  mHandler.removeMessages(MSG_POLLING);
  mHandler.sendEmptyMessageDelayed(MSG_POLLING, POLLING_INTERVAL);
  return;
 }
 doWork(); //asyn network
 mHandler.sendEmptyMessageDelayed(MSG_POLLING, POLLING_INTERVAL);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

本文由 华域联盟 原创撰写:华域联盟 » Android两种轮询的实现方法

转载请保留出处和原文链接:https://www.cnhackhy.com/108617.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

Android实现动态体温计

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们