Я борюсь с тем, как инициализировать свое приложение. Мне нужно проверить две вещи (дело и учетную запись), прежде чем показывать идеальный начальный экран. Для запуска приложения должен быть хотя бы один из них. Поэтому, если их нет, мне нужно, чтобы они были созданы или найдены / подключены (например, для входа в систему). У каждого будет свой экран (-а) для этого, и эти потоки должны быть доступны с других экранов (например, из настроек), поскольку в приложении может быть несколько таких экранов. Я хотел бы:
- Проверьте учетную запись по умолчанию, если ее нет, проверьте любую учетную запись, если ее нет, перейдите к фрагменту создания / привязки учетной записи.
- Проверьте вариант по умолчанию, если его нет, проверьте любой вариант, если его нет, перейдите к фрагменту дела создания / ссылки.
- Показать начальный экран.
Каждая из проверок должна будет получить объект из базы данных Room, когда он будет найден.
Я собирался использовать условную навигацию, поскольку это похоже на то, что требуется , но пример очень упрощен. Прежде всего, событие - это нажатие кнопки, в то время как моему процессу нужно проверить базу данных. Эта часть, кажется, усложняет мне задачу, поскольку проверка базы данных - это асинхронный процесс, а инициализация приложения - нет. Я не могу показать главный экран, пока не закончу проверку. Выполнение этих проверок в основном потоке не кажется правильным подходом. Об этом есть много сообщений.
Поскольку я не могу показать главный экран без двух установленных объектов и не должен запускать запросы в основном потоке, я нашел ссылки на экран-заставку. Это также вызывает некоторые разногласия по этому поводу.
Я пробовал этот подход, используя Executor для выполнения запросов:
Executor executor = Executors.newSingleThreadExecutor();
... а затем, если процесс инициализации завершен, перейдите на главный экран, но я столкнулся с ошибкой:
FATAL EXCEPTION: pool-1-thread-1
android.util.AndroidRuntimeException: Animators may only be run on Looper threads
Это похожий сценарий, но
Я уверен, что это было сделано раньше. Как подходят другие люди 1) условная навигация при запуске приложения 2) вызовы асинхронной базы данных в процессе инициализации.
startDestination
условно в потоке пользовательского интерфейса после выполнения запроса в фоновом потоке. - person Nongthonbam Tonthoi   schedule 29.10.2020