0

私の質問は暗闇の中のショットです: Android 4.x / Jelly Bean との取引は何ですか? サービス、粘着性、フォアグラウンドなどに既知の問題はありますか?

バックストーリー: あらゆる種類の Android デバイスとエミュレーターで音楽プレーヤー アプリケーションを正常にテストし、つい最近、物理的な Jelly Bean デバイス (Samsung Rugby Pro) でテストしました。画面がオフになっていると、MediaPlayer onCompletion関数が一貫して起動されないことがわかりました。ほとんどの場合、数分間発火しません。画面がオンのとき、アクティビティが表示されているかどうかに関係なく、アプリケーションは問題なく動作します。

(Gingerbread、KitKat、Lollipop、または Marshmallow では問題はありません。私はこれらのバージョン用の物理デバイスを持っており、すべて問題なく動作します。)

デバイス情報:

  • OS バージョン: 3.0.31-656355
  • リリース: 4.1.1
  • デバイス: comancheatt
  • モデル: SAMSUNG-SGH-I547
  • 作品一覧: コマンチューク
  • ブランド: サムスン
  • 表示: JRO03L.I547UCBLL1
  • CPU_ABI: armeabi-v7a
  • CPU_ABI2: アルメアビ
  • ハードウェア: qcom
  • ID: JRO03L
  • メーカー: サムスン
  • ユーザー: se.infra
  • ホスト: SEP-125
4

1 に答える 1

0

私はこれを理解しました。これがあなたにも役立つことを願っています...

問題はイベントを発生させることではなく、無期限にブロックすることです。私は以前、これをAndroid issue #959: MediaPlayer "crash" (呼び出しスレッドをデッドロックする) が未使用の MediaPlayerをリセットまたは解放するときに発生すると考えていましたが、これは私の場合には正しくありませんでした。onCompletionreset()

私の特定の問題は、テスト デバイスでの攻撃的な睡眠動作でした。reset()(またはrelease())への呼び出しもMediaPlayerインスタンスのWakeLock. それが発生すると、デバイスはスリープ状態になり、コードはその機能でブロックされているように見えます。デバッガーが接続またはプラグインされていても、デバイスがスリープ状態にならなかったため、これを再現できませんでした。

私の解決策は、基本的に再生が開始され、すべての曲が再生された後WakeLockに、個別に管理される を作成することでした。技術的には、デバイスが既に起動しているときにa を保持する必要がないため、アクティビティが一時停止され、再開時に解放される場合にのみこれを行います。acquire()release()WakeLock

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyTag");
wakeLock.acquire();
于 2016-04-27T15:11:28.843 に答える