Android兩種輪詢的實現方法
阿新 • • 發佈:2020-06-20
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); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。