Активность onStop() не вызывается, когда кнопка дома нажата в многоэкранном режиме Android N

Я пытаюсь сделать наше видео приложение для поддержки многопоточного режима 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() в этом случае. Есть ли подходящее обходное решение для таких случаев?

Ответ 1

Когда вы нажимаете кнопку "домой" в многооконном режиме, система находится в переходном состоянии, позволяя пользователю выбрать приложение для запуска, пока ваше приложение продолжает работать (если вы - самое верхнее приложение, вы будете обратите внимание, что вы все равно можете видеть строку состояния в своем приложении). Нет никакого обратного вызова, связанного с переходом в этот переходный режим, и вы не должны изменять свое поведение при входе в этот переходный режим.

Вместо этого вы должны продолжить воспроизведение любого видео - только остановите свое видео, когда вы получите обратный вызов onStop().

Ответ 2

В соответствии с официальным документом MultiWinodw LifeCycle:

" Многооконный режим не меняет жизненный цикл активности."

В режиме MultiWindow единственная активность, с которой пользователь взаимодействовал в последнее время, будет самой большой активностью, а другая активность перейдет в режим onPause(), поскольку она будет частично видна. Когда пользователь попытается взаимодействовать с другой деятельностью, которая войдет в состояние onResume(), и она станет самой верхней активностью и остатком, вы перейдете в режим onPause().

Теперь в случае музыкального проигрывателя они четко упомянули, что вы должны продолжить воспроизведение своей музыки, даже если метод onPause() будет вызываться, если вы поддерживаете режим MultiWindow.

Остановите свое видео только при вызове onStop().