10

Android N マルチウィンドウ モードをサポートするビデオ アプリを作成しようとしています。マルチウィンドウ モードでアクティビティのライフサイクルが混乱することを発見しました。この現象は、アプリがトップ画面にレイアウトされ、画面全体が縦向きになっているときにホームボタンをクリックすると、上部のアプリonPause()が呼び出されますがonStop()、呼び出されません。

Google のガイドラインhttps://developer.android.com/guide/topics/ui/multi-window.html#lifecycleによると、ビデオ アプリは、onStop()コールバックではなくonPause()コールバックでビデオの再生を一時停止する必要があります。

この状況では、ホーム ボタンが押され、アクティビティがバックグラウンドになり、ユーザーに表示されなくなります。アプリはビデオの再生を一時停止する必要がありますが、onStop()コールバックを取得できません。その間、アクティビティはonMultiWindowChanged()コールバックを起動しません。これは、バックグラウンドにあるにもかかわらず、アクティビティがまだマルチウィンドウ モードであることを意味します。この場合、isInMultiWindowMode()が返さtrueれます。

アプリが左側の画面にあり、画面全体が横向きの場合も同じ問題が発生します。

この質問を検索したところ、誰かがすでに問題を Google に投稿していることがわかりましたが、Android Nougat リリースでは処理されていません。

https://code.google.com/p/android/issues/detail?id=215650&can=1&q=multi%20window%20onstop&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened

では、このような状況でビデオの再生を一時停止する適切なタイミングはいつでしょうか? コールバックでビデオを一時停止するとonPause()、アクティビティがマルチウィンドウ モードでユーザーに表示される場合があります。onStop()そうしないと、この場合、コールバックを取得できません。このような場合の適切な回避策はありますか?

4

2 に答える 2

2

When you hit the home button in multi-window mode, the system is in a transient state, allowing the user to select an app to start while your app continues to run (if you're the topmost app, you'll note you can still see the status bar from your app). There is no callback associated with going into this transient mode and you should not change your behavior when entering this transient mode.

Instead, you should continue to play any video - only stop your video when you receive a callback to onStop().

于 2016-09-28T04:27:07.727 に答える
1

公式ドキュメントMultiWinodw LifeCycle に従って

"マルチウィンドウ モードは、アクティビティのライフサイクルを変更しません。 "

マルチウィンドウ モードでは、ユーザーが最近操作した唯一のアクティビティが最上位のアクティビティになり、他のアクティビティはonPause()部分的に表示されるモードになります。ユーザーがonResume()状態になる他のアクティビティを操作しようとすると、それが最上位のアクティビティになり、残りの 1 つがonPause()モードに入ります。

現在、音楽プレーヤーの場合、マルチウィンドウモードをサポートしている場合、メソッドが呼び出されても音楽を再生し続ける必要があることonPause()が明確に述べられています。

onStop() が呼び出される場合にのみ、ビデオを停止します

于 2016-09-28T04:38:06.567 に答える