実現したいこと
現行機種(Android 12 / Helio G90T)から後継機種(Android 16 / Helio G99)へのリプレイスを検討しています。
スペック上は後継機の方が勝っているため、現行機と同等、もしくはそれ以上の画面遷移パフォーマンスを実現したいと考えています。
現在、特定の画面遷移で数秒のフリーズが発生しており、この原因を特定し、解消するための指針(OS設定の確認、またはアプリ側の改修方針など)を得ることが目的です。
発生している問題・分からないこと
後継機として選定中のAndroid端末(Android 16 / Helio G99)において、アプリの画面遷移時に、旧機種(Android 12 / Helio G90T)と比較して**2倍〜4倍程度の極端なフリーズ(メインスレッドの停止)**が発生しています。
Android Studioのプロファイラで詳細に計測したところ、非常に不可解な結果が出ています。
演算性能は向上している: レイアウト計算やGPU描画の時間は、新機種の方が10倍以上速くなっています。
「開始前」に時間がかかっている: 画面遷移の処理に入ってから、実際にレイアウト計算などの「作業」が始まるまでの**待機時間(指示待ち時間)**だけで、約1.8秒〜4.5秒も費やしています。
【ログからの推測】
この「指示待ち時間」の間、DB(SQLite)からのデータ取得などの同期処理が行われていますが、リソース(CPU/メモリ)が飽和している形跡はありません。
スペック上は勝っているはずの新機種で、なぜ「処理に着手するまでの時間」だけがこれほど悪化するのか、その原因がわからず困っております。OSのバージョンアップに伴うメインスレッドの挙動変化や、特定SoCにおけるI/Oの特性などが関係しているのではないかと推測しています。
エラーメッセージ
error
1明確なエラーログは出力されていませんが、Android Studioのプロファイラ(System Trace)にて、画面遷移時に以下の異常な待機時間を計測しています。 2 3【プロファイラ計測値(画面遷移時)】 4※後継候補機(Android 16)における数値 5 6Total Hang Time (99th Percentile): 1.9s 〜 4.6s(旧機は 0.9s 〜 1.25s) 7 8Wait time before Layout/Draw: 1.8s 〜 4.5s(旧機は 0.5s 〜 0.8s) 9 10【計測時の状況】 11上記「Wait time」の間、メインスレッドが完全にブロック(気絶)状態になっていますが、CPU Usageは低く、リソース不足によるエラー(ANR)の寸前で踏みとどまっているような挙動です。
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
以下の手順で調査・検証を行いました。
① Android Studio Profilerによる詳細分析
画面遷移時のスレッドの動きを可視化したところ、以下の事実が判明しました。
新機種(Android 16 / Helio G99)は、旧機種(Android 12 / Helio G90T)に比べ、レイアウト計算やGPU描画自体の処理速度は10倍近く高速である。
しかし、描画処理が始まる直前の「指示待ち時間(空白時間)」が、旧機種(約0.5秒)に対し、新機種(約1.8秒〜4.5秒)と極端に長くなっている。
この待機時間中、メインスレッドはDB(SQLite)からのデータ取得などの同期処理でブロックされている。
② リソース使用状況の確認
待機時間中のCPUおよびメモリ負荷を確認しましたが、いずれも余裕があり、リソース飽和による遅延ではないことを確認済みです。
③ 外部相談および検索
社内のシニアエンジニアに相談したところ、「SoCの演算性能自体に問題はなく、特定のI/O処理(DBアクセス等)の開始にラグが発生している可能性がある」「ハードウェアの個体不良の可能性も捨てきれないが、OSのバージョン差による挙動の変化も疑わしい」との助言を得ました。
また、同様の事例(Android 16 × MediaTek製SoCでのI/O遅延)を検索しましたが、決定的な解決策は見つかっておりません。
④ 個体差の検証(進行中)
端末固有の不具合を疑い、現在、別個体(同機種)をもう1台手配して再現性を確認する準備をしています。
補足
特になし