$30 off During Our Annual Pro Sale. View Details »

解決むずかったバグ3選

 解決むずかったバグ3選

horitamon

April 12, 2022
Tweet

More Decks by horitamon

Other Decks in Programming

Transcript

  1. 解決むずかったバグ3選

    2022/04/12

    Android個人開発LT 

    @horitamon


    View Slide

  2. ● モバイルアプリエンジニア

    (Androidがメイン)

    ● 2021/09 Voicy入社

    ● 今年スノボにハマって

    18回ゲレンデへ

    ● なぜか小学校の教員免許持ってる


    自己紹介

    horitamon(堀 多聞)


    View Slide

  3. ©2022 Voicy, Inc.
    はじめに


    ● Bluetooth LE使ってデータやりとりできるアプリをつくってます

    ● 全然進んでないので今日は話しません()

    ● アプリ開発をしていて「ちゃんと事前に検証しておけばよかった…」と

    反省したバグを赤裸々にご紹介

    ● ご迷惑をかけたユーザーのみなさま、大変申し訳ありませんでした。

    今回の発表内容


    View Slide

  4. バグ①

    RecyclerViewの読み込みがめっちゃ重い


    View Slide

  5. Android
 iOS


    View Slide

  6. 原因:

    RecyclerViewの高さを可変にしていることで描画処
    理が毎回走る


    View Slide

  7. ©2022 Voicy, Inc.
    原因

    ● RecyclerViewは同じようなレイアウトをたくさん表示するときに

    描画を効率化してくれる

    →画面に表示されていない範囲は描画しない

    ● 「もっと見る」を押してRecyclerViewの要素を追加すると

    RecyclerViewの表示範囲が広がるように実装していた

    →全要素の描画処理が一気に走ってしまう


    View Slide

  8. 端末の表示範囲

    NestedScrollView

    RecyclerView

    端末の表示範囲

    NestedScrollView

    RecyclerView


    View Slide

  9. 端末の表示範囲

    NestedScrollView

    RecyclerView

    端末の表示範囲

    NestedScrollView

    RecyclerView

    全部描画!

    View Slide

  10. ©2022 Voicy, Inc.
    対策


    ● ベストは併用しないこと

    ● 併用するとしたらRecyclerViewの高さを固定にする

    →表示範囲外のitemはスクロールした後に描画処理が走る


    View Slide

  11. 端末の表示範囲

    NestedScrollView

    RecyclerView

    端末の表示範囲

    NestedScrollView

    RecyclerView

    暫定的に固定して
    スクロールできるように

    View Slide

  12. バグ②

    たまにしかPush通知が届かない


    View Slide

  13. ©2022 Voicy, Inc.
    現象

    ● Firebase Cloud Messagingを使ってPush通知を実装している

    ● 動作確認のタイミングでは大体通知が届く

    ● 放送開始、運営からのお知らせなど、種別問わずすべての通知が届く

    ● 開発版でも製品版でも届く


    ● でもしばらく使ってると届かなくなる…

    Push通知が来ることには来る、でも来なくなる


    View Slide

  14. 原因:

    トークン更新処理が完了する前に

    トークンを再発行していた


    View Slide

  15. View Slide

  16. View Slide

  17. https://firebase.google.com/docs/reference/android/com/google/firebase
    /messaging/FirebaseMessaging?authuser=0#public-methods

    View Slide

  18. https://firebase.google.com/docs/reference/android/com/google/firebase
    /messaging/FirebaseMessaging?authuser=0#public-methods

    View Slide

  19. https://firebase.google.com/docs/reference/android/com/google/firebase
    /messaging/FirebaseMessaging?authuser=0#public-methods
    非同期

    View Slide

  20. ©2022 Voicy, Inc.
    原因と対策


    ● firebase-bomを26.2.0→28.2.0にアップデートした

    →そのタイミングでFirebaseMessaging.deleteToken()が

     非同期メソッドに変わった

    ● トークンの削除が完了する前に発行処理をしていたので

    発行後にトークンが更新されていた

    ● 完了を待機してから再発行するように修正


    View Slide

  21. 削除完了を
    待機

    View Slide

  22. バグ③

    Android 8の端末だけアプリ起動できない


    View Slide

  23. ©2022 Voicy, Inc.
    現象


    ● シンプルにAndroid 8だけ起動しない

    ● 8より古いOSも、新しいOSも起動する

    Android 8だけアプリが起動しない


    View Slide

  24. ©2022 Voicy, Inc.
    原因と対策


    ● 以下の条件を満たすとクラッシュする

    ○ Android 8.0 の端末

    ○ targetSdkVersion が 27 以上 

    ○ 背景を透過にしている 

    ○ 画面の向きを固定している 

    ● アプリ全てで使ってるStyleで

    android:windowIsTranslucentをtrueにしてしまった

    →すぐ設定を削除


    View Slide

  25. ©2022 Voicy, Inc.
    原因と対策


    ● 下記の記事に救われました…ありがとう…

    ○ java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation - Qiita 


    View Slide

  26. ぜひ日々のプロダクト開発や個人開発で

    同じ轍を踏まないよう

    参考にして頂けますと幸いです…


    View Slide

  27. 音声×テクノロジーでワクワクする社会をつくる 


    View Slide