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