Оптимизация навигации по фрагменту ArCore с помощью addImage () и сессии - PullRequest
0 голосов
/ 01 июня 2019

У меня есть приложение для сборки, используя ArFragment из com.google.ar.sceneform.ux:sceneform-ux:1.9.0.Я добавил навигацию, которая воссоздает отображаемые фрагменты.Но создание ArFragment длится очень долго.

Сначала я увидел, что метод addImage() занимает большую часть времени.В документации можно найти, что:

Примечание: этот метод занимает около 10-20 мс для входного потока байта 5 МБ.Запустите это в фоновом потоке, если это повлияет на ваше приложение.

Но когда я переместился:

augmentedImageDatabase.addImage(DEFAULT_IMAGE_NAME, augmentedImageBitmap)

в другой поток, чтобы запустить его асинхронно, ArCore прекратил распознавать или обнаруживать этот маркер.

Тогда я подумал, что, возможно, мне следует сохранить AugmentedImageDatabase и использовать его снова.Но такой конструктор базы данных использует session, поэтому я предполагаю, что базу данных нужно создавать заново каждый раз.Я закончил с изменением размера изображения, чтобы ускорить процесс.

После профилирования я обнаружил, что вторая медленная вещь - это создание сессии.Есть ли возможность повторно использовать сессию?Я обнаружил, что сохранить его из BaseArFragment невозможно, потому что все методы для создания сеанса являются личными.

Должен ли я реализовать BaseArFragment самостоятельно для повышения производительности или всегда сохранять экземпляр ArFragment в Fragment BackСтек и только накрыть его другими взглядами?Как добавить изображения во время выполнения, если addImage() в фоновом потоке не работает?

1 Ответ

0 голосов
/ 16 июня 2019

В итоге я переписал BaseArFragment с com.google.ar.sceneform.ux:sceneform-ux, чтобы начать сеанс с загрузкой изображений в фоновом потоке.Просмотр камеры начинается примерно через 1 секунду, но поток пользовательского интерфейса не блокируется.Я также изменил размер изображения, используемого в качестве маркера, до ширины и высоты менее 1 тыс. Пикселов, что ускорило загрузку.Я полагаю, что изображение может быть еще меньше, как говорят в документации:

  • Разрешение изображения должно быть не менее 300 x 300 пикселей.
  • Использование изображений с высоким разрешением неулучшить производительность.

В будущем я рассмотрю сохранение фрагмента в заднем стеке, но для изменения маркера все равно потребуется перезагрузить весь сеанс.

...