Androidのポーリングの実現方法
Androidのポーリングの簡単な書き方は、以下の通りです。
他に簡単なポーリング方法はハンドルのpostDelayを利用して実現されます。
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方法を呼び出して、ポーリングバインディングを解除して、メモリが漏れないようにします。他に簡単なポーリング方法はハンドルの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);
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。