Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
解決むずかったバグ3選
Search
horitamon
April 12, 2022
Programming
0
330
解決むずかったバグ3選
horitamon
April 12, 2022
Tweet
Share
More Decks by horitamon
See All by horitamon
Kotlin Multiplatformで考えるクリーンアーキテクチャ
horitamon
0
43
スタートアップ企業のフェーズ転換期を乗り越えるためのリアーキテクト戦略
horitamon
0
490
ActでGithub Actionsの動作確認をする
horitamon
0
900
Bitrise Pipelinesを使って リリース作業を効率化する
horitamon
0
55
コルーチンを使って処理の見通しをよくする
horitamon
2
2.1k
「OK Google」でアプリの機能を呼び出してみる
horitamon
0
980
Other Decks in Programming
See All in Programming
From Idea to IDE: Developing Plugins for Android Studio
thisaay
1
170
いまから追い上げる、Jetpack Compose トレーニング
nyafunta9858
0
530
マルチモジュールにおけるテスト最適化
fxwx23
0
210
Google Sign-inの移行から始めるCredential Manager活用
clockvoid
0
220
unique パッケージから学ぶ interning と weak reference @ Asakusa.go#3
karamaru
2
810
GenU導入でCDKに初挑戦し、悪戦苦闘した話
hideg
0
160
Regular Expressions, REXML, Automata Learning
makenowjust
0
220
Prolog入門
qnighy
4
1k
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
760
Architecture Decision Record (ADR)
nearme_tech
PRO
1
680
オートマトン学習しろ / Do automata learning
makenowjust
3
130
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
1
370
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
508
110k
Debugging Ruby Performance
tmm1
72
12k
Fireside Chat
paigeccino
31
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
What’s in a name? Adding method to the madness
productmarketing
PRO
21
3k
Embracing the Ebb and Flow
colly
83
4.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
It's Worth the Effort
3n
182
27k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Thoughts on Productivity
jonyablonski
66
4.2k
Building Applications with DynamoDB
mza
90
6k
VelocityConf: Rendering Performance Case Studies
addyosmani
322
23k
Transcript
解決むずかったバグ3選 2022/04/12 Android個人開発LT @horitamon
• モバイルアプリエンジニア (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通知が来ることには来る、でも来なくなる
原因: トークン更新処理が完了する前に トークンを再発行していた
None
None
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
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
ぜひ日々のプロダクト開発や個人開発で 同じ轍を踏まないよう 参考にして頂けますと幸いです…
音声×テクノロジーでワクワクする社会をつくる