From 774daca177301d4cfac057925761c36a1fce0cfd Mon Sep 17 00:00:00 2001 From: fansen Date: Mon, 14 Nov 2016 10:54:18 +0800 Subject: [PATCH] Another way to achieve Polling Feature use repeatWhen() and observable.delay() to achieve Polling Feature --- .../maat/hello_rxjava/PollingFragment.java | 58 +++++++------------ 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java index a25d6fa..82cd04c 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java @@ -17,29 +17,22 @@ import rx.Observable; import rx.Subscriber; import rx.Subscription; -import rx.functions.Action0; import rx.functions.Action1; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - +import rx.functions.Func1; public class PollingFragment extends Fragment { - static final String TAG = "PollingFragment"; @BindView(R.id.btn_polling) Button mBtnPolling; - int N=0; - private Subscription subscribe; - private CompositeSubscription mCompositeSubscription; + int N = 0; + private Subscription subscription; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.polling_fragment, container, false); ButterKnife.bind(this, view); - mCompositeSubscription = new CompositeSubscription(); return view; } @@ -51,35 +44,32 @@ public void onResume() { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - } - @OnClick(R.id.btn_polling) public void onClick() { - //此处有bug,subscribe无法释放,望高人pull requests - subscribe=Observable.create(new Observable.OnSubscribe() { + subscription = Observable.create(new Observable.OnSubscribe() { @Override - public void call(final Subscriber observer) { - - Schedulers.newThread().createWorker() - .schedulePeriodically(new Action0() { - @Override - public void call() { - observer.onNext(" "+(N++)); - } - }, 0, 1000, TimeUnit.MILLISECONDS); + public void call(final Subscriber subscriber) { + subscriber.onNext(" " + (N++)); + subscriber.onCompleted(); } }) + .repeatWhen(new Func1, Observable>() { + @Override + public Observable call(Observable observable) { + return observable.delay(1, TimeUnit.SECONDS); + } + }) .subscribe(new Action1() { - @Override - public void call(String s) { - printLog("polling"+s); - } - }); - mCompositeSubscription.add(subscribe); + @Override + public void call(String s) { + printLog("polling" + s); + } + }); } + private void printLog(String s) { Log.i(TAG, s); } @@ -87,12 +77,8 @@ private void printLog(String s) { @Override public void onDestroy() { super.onDestroy(); - mCompositeSubscription.unsubscribe(); + Log.i(TAG, "subscribe.unsubscribe()"); + subscription.unsubscribe(); } - } - - - -