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