いきなりRxAndroid
RxAndroidを使う機会があったので,調べたことをまとめました.
※理解が浅いので間違っている箇所はご指摘いただけると嬉しいです><
RxAndroidとは
Reactive Extentions Androidの略で,RxJavaを内包しAndroidで利用するための機能を追加してあります.
ソースコードはこちらです.
非同期処理が簡単に実装できます.
AsyncTaskに比べ実装が簡単で,ModelとViewで役割分担しやすいです.
使い方
Observavle:処理を実行しObserverに結果を伝える
Observer:Observavleから結果を受け取り処理する
build.gradle
compile 'io.reactivex:rxjava:1.1.5' compile 'io.reactivex:rxandroid:1.2.0'
MainActivity.java
package himitsu; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.schedulers.Schedulers; import rx.android.schedulers.AndroidSchedulers; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Observable .create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { // 重い処理 int i = 0; Log.d("debug", "Observable:onNext1"); subscriber.onNext(i); Log.d("debug", "Observable:onNext2"); Log.d("debug", "Observable:onCompleted1"); subscriber.onCompleted(); Log.d("debug", "Observable:onCompleted2"); } }) .subscribeOn(Schedulers.newThread()) // どのスレッドでObservableを走らせるか .observeOn(AndroidSchedulers.mainThread()) // どのスレッドでObserverを走らせるか .subscribe(new Observer<Integer>() { // Observable.subscribe(observer)すると処理が始まる @Override public void onCompleted() { Log.d("debug", "Observer::onCompleted"); } @Override public void onError(Throwable e) { Log.d("debug", "Observer::onError"); } @Override public void onNext(Integer i) { Log.d("debug", "Observer::onNext"); } }); } }
Android Monitor
debug: Observable:onNext1 debug: Observable:onNext2 debug: Observable:onCompleted1 debug: Observable:onCompleted2 debug: Observer::onNext debug: Observer::onCompleted
参考
kirimin.hatenablog.com
使い方やメソッドを丁寧に解説されていて,初心者の私にも分かりやすかったです.
qiita.com
AsyncTaskとの比較が簡潔に記されていました.