Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
解決むずかったバグ3選
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
horitamon
April 12, 2022
Programming
520
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
解決むずかったバグ3選
horitamon
April 12, 2022
More Decks by horitamon
See All by horitamon
Kotlin Multiplatformで考えるクリーンアーキテクチャ
horitamon
0
370
スタートアップ企業のフェーズ転換期を乗り越えるためのリアーキテクト戦略
horitamon
0
610
ActでGithub Actionsの動作確認をする
horitamon
0
1.5k
Bitrise Pipelinesを使って リリース作業を効率化する
horitamon
0
76
コルーチンを使って処理の見通しをよくする
horitamon
2
2.4k
「OK Google」でアプリの機能を呼び出してみる
horitamon
0
1.7k
Other Decks in Programming
See All in Programming
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.2k
Webの地図
yosuke_furukawa
PRO
6
5k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
320
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.6k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
270
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
560
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
mrbgem 三角測量 開発
ogom
0
150
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Being A Developer After 40
akosma
91
590k
Making Projects Easy
brettharned
120
6.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Code Reviewing Like a Champion
maltzj
528
40k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.3k
Abbi's Birthday
coloredviolet
4
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
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
ぜひ日々のプロダクト開発や個人開発で 同じ轍を踏まないよう 参考にして頂けますと幸いです…
音声×テクノロジーでワクワクする社会をつくる