解決むずかったバグ3選 2022/04/12 Android個人開発LT @horitamon
View Slide
● モバイルアプリエンジニア (Androidがメイン) ● 2021/09 Voicy入社 ● 今年スノボにハマって 18回ゲレンデへ ● なぜか小学校の教員免許持ってる 自己紹介 horitamon(堀 多聞)
©2022 Voicy, Inc.はじめに ● Bluetooth LE使ってデータやりとりできるアプリをつくってます ● 全然進んでないので今日は話しません() ● アプリ開発をしていて「ちゃんと事前に検証しておけばよかった…」と 反省したバグを赤裸々にご紹介 ● ご迷惑をかけたユーザーのみなさま、大変申し訳ありませんでした。 今回の発表内容
バグ① RecyclerViewの読み込みがめっちゃ重い
Android iOS
原因: RecyclerViewの高さを可変にしていることで描画処理が毎回走る
©2022 Voicy, Inc.原因 ● RecyclerViewは同じようなレイアウトをたくさん表示するときに 描画を効率化してくれる →画面に表示されていない範囲は描画しない ● 「もっと見る」を押してRecyclerViewの要素を追加すると RecyclerViewの表示範囲が広がるように実装していた →全要素の描画処理が一気に走ってしまう
端末の表示範囲 NestedScrollView RecyclerView 端末の表示範囲 NestedScrollView RecyclerView
端末の表示範囲 NestedScrollView RecyclerView 端末の表示範囲 NestedScrollView RecyclerView 全部描画!
©2022 Voicy, Inc.対策 ● ベストは併用しないこと ● 併用するとしたらRecyclerViewの高さを固定にする →表示範囲外のitemはスクロールした後に描画処理が走る
端末の表示範囲 NestedScrollView RecyclerView 端末の表示範囲 NestedScrollView RecyclerView 暫定的に固定してスクロールできるように
バグ② たまにしかPush通知が届かない
©2022 Voicy, Inc.現象 ● Firebase Cloud Messagingを使ってPush通知を実装している ● 動作確認のタイミングでは大体通知が届く ● 放送開始、運営からのお知らせなど、種別問わずすべての通知が届く ● 開発版でも製品版でも届く ● でもしばらく使ってると届かなくなる… Push通知が来ることには来る、でも来なくなる
原因: トークン更新処理が完了する前に トークンを再発行していた
https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessaging?authuser=0#public-methods
https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessaging?authuser=0#public-methods非同期
©2022 Voicy, Inc.原因と対策 ● firebase-bomを26.2.0→28.2.0にアップデートした →そのタイミングでFirebaseMessaging.deleteToken()が 非同期メソッドに変わった ● トークンの削除が完了する前に発行処理をしていたので 発行後にトークンが更新されていた ● 完了を待機してから再発行するように修正
削除完了を待機
バグ③ Android 8の端末だけアプリ起動できない
©2022 Voicy, Inc.現象 ● シンプルにAndroid 8だけ起動しない ● 8より古いOSも、新しいOSも起動する Android 8だけアプリが起動しない
©2022 Voicy, Inc.原因と対策 ● 以下の条件を満たすとクラッシュする ○ Android 8.0 の端末 ○ targetSdkVersion が 27 以上 ○ 背景を透過にしている ○ 画面の向きを固定している ● アプリ全てで使ってるStyleで android:windowIsTranslucentをtrueにしてしまった →すぐ設定を削除
©2022 Voicy, Inc.原因と対策 ● 下記の記事に救われました…ありがとう… ○ java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation - Qiita
ぜひ日々のプロダクト開発や個人開発で 同じ轍を踏まないよう 参考にして頂けますと幸いです…
音声×テクノロジーでワクワクする社会をつくる