Проблема выглядит так: при использовании приложения в какой-то случайный момент времени экраны остаются черными, и когда я через полсекунды перехожу на другую вкладку, я вижу прошлый экран, а затем черный экран, это тоже странный момент, потому что во время перехода на новую вкладку я должен видеть на втором текущем экране, а не прошлый экран.
Также на одном из моих экранов есть плеер с автозапуском. Этот экран был создан изначально в iOS, и когда появилась эта ошибка, плеер не запускался.
Эта проблема возникает только на экранах, находящихся внутри панели вкладок. Компонент TabBar по-прежнему виден и доступен для щелчка, и пользователь может взаимодействовать с компонентом навигации, но не с каким-либо экраном внутри.
Для навигации(
Код: Выделить всё
NavHostРешение проблемы возможно, если я перезапущу приложение.
Алгоритм воспроизведения этой ошибки следующий:
Приложение не должно запускаться. Мне нужно открыть приложение, щелкнуть вкладку (в моем случае последнюю), затем сразу переключиться на следующую вкладку и обратно, и все это примерно за 10 секунд. Если проблема не была обнаружена, мне нужно закрыть приложение и запустить заново. За 10 раундов этого алгоритма я могу воспроизвести эту проблему.
Это не универсальный алгоритм, но он работает. Мой результат после тестирования:
Используя эти физические устройства, я могу воспроизвести эту проблему.
iPhone 13 Pro Max, iOS 17.6.1
iPad Pro 12.9, iOS 18.5
iPad Pro 12.9, iOS 18.6.2
Устройства, на которых я не могу воспроизвести эту проблему.
iPhone SE 2022, iOS 18.5
К сожалению, количество физических устройств ограничено, но похоже, что эта проблема также может зависеть от размера экрана. На iPad эту проблему можно решить очень быстро, следуя приведенному выше алгоритму.
Подробности проекта:
Минимальная версия проекта iOS — iOS 16.
Kotlin версия 2.2.0
Compose Multiplatform 1.8.2
AGP 8.8.2
AndroidX Navigation 2.9.0-beta03
Жизненный цикл AndroidX 2.9.1
Знаете ли вы, в чем проблема, или, возможно, кто-то уже сталкивался с этой проблемой и решил ее?
Дополнительные сведения
К сожалению, я не могу опубликовать пример кода этой проблемы, так как не понимаю, что привело к этой проблеме, а проект имеет ограничения. Но у меня есть некоторая информация.
Видеопример проблемы
Общий обзор иерархии экранов, который я прикрепил к этому сообщению:


Для навигации я использовал библиотеку compose-navigation.
Кроме того, я пытался удалить подобную анимацию, но проблема все равно возникла.
Код: Выделить всё
composable(
enterTransition = { EnterTransition.None },
exitTransition = { ExitTransition.None }
) {
MyListScreen(navController, koinViewModel(), paddingValues)
}
Код: Выделить всё
fadeIn(tween(0)) - My Default animation for the screen where the issue is
fadeOut(tween(0)) - My Default animation for the screen where the issue is
fadeIn()
fadeOut()
slideInHorizontally(tween(0))
slideOutHorizontally(tween(0))
slideIn() - The same issue + one-time app was fully unresponsive
slideOut() - The same issue + one-time app was fully unresponsive
Код: Выделить всё
slideInHorizontally()
slideOutHorizontally()
slideInVertically(tween(0))
slideOutVertically(tween(0))
slideInVertically()
slideOutVertically()
Подробнее здесь: https://stackoverflow.com/questions/798 ... lin-multip
Мобильная версия