Подтвердить что ты не робот

Когда использовать Android Loaders

Погрузчики

  • отслеживать источник данных и предоставлять новые результаты
  • После изменения конфигурации: нет необходимости повторно запрашивать данные

Я прочитал руководство по Android о Loaders. Я прочитал Алекс Локвуд 4 части tutorial. Протестировал его образец app. Пытался прочитать приложение Google для ввода-вывода 13, там функция потока и чтение его кода узнают, что он использует Loaders, поскольку он предоставляет код для создания StreamLoader. Вот ссылка Я полагаю, они используют его для мониторинга новых данных и добавления их в их представление.

То же самое для приложения Alex. Там наблюдатель и когда появляются новые записи данных, запускается обновление для пользовательского интерфейса.

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

Возможно, что-то вроде Twitter. Новые сообщения для вас, пользовательские Observer для уведомления об изменениях, пользовательские Loader приносят данные и адаптер для их отображения. Не нужно "подтягивать-обновлять". Но опять же у Твиттера есть свой собственный RESTful API, который делает то же самое. Нет необходимости в указателе на новые данные. (не знаю, как они это делают, но я думаю, как-то "нажимать" новые данные на ваше устройство).

Итак, мой вопрос:

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

Есть ли примеры/приложение, которое я могу проверить, имея дело с этой логикой: контролировать источник данных → получить данные → обновить пользовательский интерфейс

Любые характерные случаи (такие, как ранее упоминавшийся мной "lifecore" ), что, когда мы имеем дело с ними, мы имеем для выбора Loaders?

Вторая часть Loaders (изменение конфигурации, сохранение данных), я думаю, это ясно. Никто не хочет повторно загружать галерею изображений, когда пользователь поворачивает устройство.

Спасибо и извините мое замешательство

4b9b3361

Ответ 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 для загрузки данных или выполнения длительных операций в фоновом потоке и передачи результатов (или прогресса) в поток пользовательского интерфейса, но они являются наилучшим вариантом для большинства случаев использования.