Когда использовать Android Loaders
Погрузчики
- отслеживать источник данных и предоставлять новые результаты
- После изменения конфигурации: нет необходимости повторно запрашивать данные
Я прочитал руководство по Android о Loaders.
Я прочитал Алекс Локвуд 4 части tutorial. Протестировал его образец app.
Пытался прочитать приложение Google для ввода-вывода 13, там функция потока и чтение его кода узнают, что он использует Loaders, поскольку он предоставляет код для создания StreamLoader
. Вот ссылка
Я полагаю, они используют его для мониторинга новых данных и добавления их в их представление.
То же самое для приложения Alex. Там наблюдатель и когда появляются новые записи данных, запускается обновление для пользовательского интерфейса.
Пока мне кажется, погрузчики - идеальный выбор для приложения "lifecore". Когда появляется новое обновление (что означает новый ввод данных), оно появляется на вашем экране.
Возможно, что-то вроде Twitter. Новые сообщения для вас, пользовательские Observer
для уведомления об изменениях, пользовательские Loader
приносят данные и адаптер для их отображения. Не нужно "подтягивать-обновлять".
Но опять же у Твиттера есть свой собственный RESTful API, который делает то же самое. Нет необходимости в указателе на новые данные. (не знаю, как они это делают, но я думаю, как-то "нажимать" новые данные на ваше устройство).
Итак, мой вопрос:
Погрузчики - лучший вариант, когда мы хотим наблюдать за источником данных и, чтобы изменить наш вид, чтобы он отображал новые данные?
Есть ли примеры/приложение, которое я могу проверить, имея дело с этой логикой: контролировать источник данных → получить данные → обновить пользовательский интерфейс
Любые характерные случаи (такие, как ранее упоминавшийся мной "lifecore" ), что, когда мы имеем дело с ними, мы имеем для выбора Loaders?
Вторая часть Loaders (изменение конфигурации, сохранение данных), я думаю, это ясно. Никто не хочет повторно загружать галерею изображений, когда пользователь поворачивает устройство.
Спасибо и извините мое замешательство
Ответы
Ответ 1
Лучший способ описать загрузчик - это обработчик, который всегда включен. Оба загрузчика и обработчики передают данные между объектами.
Я согласен с тем, что вы сказали о приложении "lifecore".
Loader контролирует источник своих данных и предоставляет новые результаты при изменении содержимого.
Чтобы ответить на ваши вопросы:
1) Погрузчики - лучший вариант, когда мы хотим наблюдать за источником данных и изменять наш вид, чтобы он отображал новые данные?
A: Да. если ваш источник данных постоянно обновляется. Например, как приложение с запасом. Если ваши данные не постоянно обновляются, то нет, не используйте загрузчик. Например, если ваш источник данных извлекается только один раз, то нет необходимости в загрузчике.
2) Есть ли примеры/приложение, которое я могу проверить, имея дело с этой логикой: контролировать источник данных → получить данные → обновить пользовательский интерфейс
A: https://www.youtube.com/watch?v=3d9BeWqlfTk
Ответ 2
Да, это то, что вы хотите использовать для потока, который вы описываете. Тангенциально также существуют AsyncTasks и Services, которые имеют сходство.
AsyncTasks
Описание (из документов):
AsyncTask предназначен для вспомогательного класса вокруг Thread и Handler и не является общей структурой потоков. AsyncTasks идеально подходит для коротких операций (всего несколько секунд).
Внимание. Еще одна проблема, с которой вы можете столкнуться при использовании рабочего потока, - это непредвиденные перезагрузки в вашей деятельности из-за изменения конфигурации среды выполнения (например, когда пользователь меняет ориентацию экрана), что может привести к уничтожению рабочего потока. Чтобы увидеть, как вы можете сохранить свою задачу во время одной из этих перезапусков и как правильно отменить задачу при уничтожении действия, см. Исходный код для примера приложения Shelves.
Если вам просто нужна оболочка для базового шаблона Threading, используйте AsyncTask, иначе я предлагаю вам использовать AsyncTaskLoader, если вы нужен универсальный способ запуска интенсивных операций в Activity или Fragment. Вы получаете те же преимущества от AsyncTask, но для вас это связано с проблемами жизненного цикла. Существуют также специальные загрузчики, такие как CursorLoader, которые будут обрабатывать конкретные источники данных и иметь удобства для взаимодействия с определенными элементами пользовательского интерфейса.
Услуги
Описание (из документов):
Служба - это компонент приложения, который может выполнять длительные операции в фоновом режиме и не предоставляет пользовательский интерфейс. Другой компонент приложения может запустить службу, и он будет продолжать работать в фоновом режиме, даже если пользователь переключится на другое приложение. Кроме того, компонент может связываться с сервисом для взаимодействия с ним и даже выполнять межпроцессное взаимодействие (IPC). Например, служба может обрабатывать сетевые транзакции, воспроизводить музыку, выполнять ввод/вывод файлов или взаимодействовать с поставщиком контента, все из фона.
Вы использовали бы службу для обработки данных, которые были бы нажаты на телефон. В противном случае пользователю нужно будет открыть приложение, чтобы получить какие-либо нажатые данные. Сервисы не взаимодействуют с вашим пользовательским интерфейсом. Таким образом, общий шаблон проектирования заключается в использовании Сервиса для сбора данных с сервера (будь то нажатие в реальном времени или если вы проводите опрос) и сохраните его в своей базе данных для использования как при открытии приложения, так и при отсутствии. Есть много других вариантов использования Служб, но этот, вероятно, самый популярный.
Заключение
Поэтому нет, вам не требуется использовать Loader для загрузки данных или выполнения длительных операций в фоновом потоке и передачи результатов (или прогресса) в поток пользовательского интерфейса, но они являются наилучшим вариантом для большинства случаев использования.