/ kyokomi note / blog

AnnictterのRxを廃止してcoroutineを使うようにした

July 5, 2020 [Android | Annict | 個人開発]

Annictter 1.4.1をリリースした。

細かい修正をいくつかした。codelabまわり触ってて学んだことを反映したりなどなど。

image-20200705164308865

1.4.1変更点

Rxを廃止してcoroutineを使うようにした

長らくお世話になっていたRxですが、実はAPI呼び出しなどの非同期処理にしか使ってなかったため、coroutineに置き換えてみたら思ったより問題なく動いたので移行しました。

基本的にはViewModelのviewModelScope呼び出しで済むので、今まで雑だったキャンセル処理もうまいことやってくれるようになったs。

ジェスチャーナビゲーションを有効にしていると下に黒い棒がでているのが急に気になりだしてカッとなって対応した。

普通にThemeでtransparent指定するだけなので一瞬でした。

beforeafter
Screenshot_20200705-164803Screenshot_20200705-163449

DataBindingを導入

Data Binding in AndroidのcodelabをやってみたでViewModelのLiveDataなどをそのままDataBindingする使い方がすごいいい感じだったので、一部の画面に導入してみた。

FragmentのonCreateViewでviewModelの情報をobserveしてもりもりbindingのviewに値を設定していたコードが全部消えてスッキリした。

-        viewModel.account.observe(viewLifecycleOwner, Observer {
-            it?.let { account ->
-                binding.name.text = account.name
-                binding.username.text = "@${account.username}"
-                binding.description.text = account.description
-
-                glide.load(account.backgroundImageUrl)
-                    .centerCrop()
-                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
-                    .skipMemoryCache(false)
-                    .placeholder(R.drawable.no_image)
-                    .into(binding.backgroundImage)
-
-                glide.load(account.avatarUrl)
-                    .circleCrop()
-                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
-                    .skipMemoryCache(false)
-                    .placeholder(R.drawable.no_image)
-                    .into(binding.avatarImage)
-            }
-        })
-
+        binding.lifecycleOwner = this
+        binding.viewModel = viewModel

Accountページの表示を少し最適化

Accountページ自体は特にいじってないんですが、MainActivityのほうでログイン状態が確認できた時点でAccount情報をAnnictのapi呼び出しで取得してSQLiteに書き込んでおく(Cache)ことで、Accountページ表示時にAPI呼び出しを待たずに表示するようにした。

新規登録後やログアウト後にプレースホルダーの画像が0.5〜1秒くらい表示されて「う〜ん」ってなってのをこれでひとまず解消した。

last modified July 11, 2020

👋 Related posts in the Annictter series...