0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

非同期処理でクラッシュした時の対処

Posted at

はじめに

今回は非同期処理であるコルーチンを使用した際、遭遇したクラッシュの対処法を調べてもなかなかいいものが見つからず苦労したので、
同じエラーが出た際にすぐに対応できるようにやった内容を記事に残しておきます。

今回発生したエラー

logがこちら

The exception was not handled due to missing onError handler in the subscribe()
method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling |
java.lang.IllegalStateException: Method setCurrentState must be called on the main thread


subscribe() メソッド呼び出しに onError ハンドラがないため、例外は処理されませんでした。さらに読む: https: //github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.IllegalStateException: メソッド setCurrentState はメイン スレッドで呼び出す必要があります

実際のコードがこちら

 viewModel.変数.subscribe {
            if (it) {
            // 画面遷移を促すメソッド
                }

今回のエラー回避方法

 viewModel.変数.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
       if (it) {
            // 画面遷移を促すメソッド
                }

内容

非同期処理内でUIの操作やUIに変化を与える処理を加えるとクラッシュします
非同期処理でUIを操作 または UIに変化を加えたい場合は、エラー内容にもある通り
処理をメイン スレッドで呼び出す必要があります

具体的には observeOn() を追加することで、購読後の処理するスレッド
を追加しました

おわりに

今回はRxjavaでの非同期処理で遭遇したクラッシュに対しての対応でした
非同期処理内ではUIに対してのアクションは行えないのだと、強く認識することになりました
今後のkotlinではcoroutinesを使用することが増えると思いますが、
coroutinesでも同じことが言えると思いますので、非同期処理の勉強がまだまだ必要だなと実感すると共に
注意が必要だなと思いました

今回の対応は私の遭遇した問題に対しての対処になります
同じようなエラーで困っている方がいましたら、参考程度に役に立てていただければ幸いです

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?