Выберите активность в зависимости от комнаты - PullRequest
0 голосов
/ 24 февраля 2019

Когда я запускаю свое приложение, я должен выбрать запуск активности, в зависимости от данных комнаты.Например:

  1. Если пользователя нет (по строке логина, сохранено в настройках) - показать вход Activity.

  2. Если естьпользователь, но его propertyA не был установлен (по умолчанию ноль) - показать активность, где он выберет его значение (впоследствии не ноль).

  3. В противном случае показать общую активность.

Первый вариант можно легко проверить, потому что мы можем сразу загрузить значение из настроек.Но для проверки propertyA мне нужно получить пользователя по логину, а Room заставляет его делать это только в фоновом режиме, поэтому здесь нужна асинхронная логика.

Варианты решения этой проблемы я вижу:

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

  2. База данных номеров allowMainThreadQueries().Плохо, потому что нарушает общую идею Room.

  3. Семафор (в главном потоке, но с ожиданием загрузки пользователя - быстрая задача).Плохо, потому что выглядит некрасиво в коде и имеет ту же проблему, что и шаг 2.

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

1 Ответ

0 голосов
/ 24 февраля 2019

Честно говоря, с вашей проблемой, я бы не пошел ни на один из трех вариантов, которые вы перечислили.

Поскольку ваше приложение полагается на выборку данных, прежде чем узнает, какой контент показывать пользователю, почему бы не использовать экран запуска?

Экран запуска был добавлен в Material Design, и это хороший вариант, если выВы хотите выполнить начальную обработку при запуске, не жертвуя эстетикой и не рискуя отображать неточные данные.

Вот ссылка на стартовые экраны: https://material.io/design/communication/launch-screen.html

Даже если вы не используете ни заполнитель пользовательского интерфейса, ни фирменный стартовый экран, еще приятнее просто показатькороткая анимация для пользователя, когда ваше приложение запрашивает, если установлено propertyA.

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