前に作ったアプリの機能追加と合わせて、非同期処理をRxAndroidに置き換えた。ときの備忘録。
環境は以下のような感じ
android {
compileSdkVersion 24
buildToolsVersion '25.0.2'
defaultConfig {
minSdkVersion 16 // Android 4.1
targetSdkVersion 24 // Android 7.0
}
}
dependencies {
compile 'io.reactivex:rxjava:1.1.5'
compile 'io.reactivex:rxandroid:1.2.0'
}
端末で確認すると謎の例外がでた。。
置き換えをして、動作確認しようとおもったら、上手く動かず。。
logcatで見ていると、こんなエラーが。。。
Caused by: rx.exceptions.MissingBackpressureException
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.onNext(OperatorObserveOn.java:138)
at rx.internal.operators.OnSubscribeTimerPeriodically$1.call(OnSubscribeTimerPeriodically.java:51)
at rx.Scheduler$Worker$1.call(Scheduler.java:120)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
petitvioletさんのQiita記事によると、通信処理にRxJavaを使うと上記の問題が起こるとのこと。
解決策(onBackpressureBuffer()を追加する)
以下のようにobserveOn()より前に、onBackpressureBuffer()をcallすればOK。
petitvioletさんのQiita記事からの引用。
new Client(url).get() .onBackpressureBuffer() // ここ .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) // .onBackpressureBuffer() ここだとダメ .subscribe(/** なにか処理 **/);
以上!!
[PR] フォローがばれないツイッタークライアント「シャイッター」

シャイッター-フォローがばれないツイッタークライアント- - Google Play の Android アプリ