1. 程式人生 > 程式設計 >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);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。