Загрузка изображения Android: использовать активность или сервис? - PullRequest
7 голосов
/ 26 апреля 2011

В настоящее время я использую Activity для загрузки изображения в Интернет, использую AsyncTask, и все работает отлично. В настоящее время я использую действие для достижения этой цели, в основном действие позволяет пользователю ввести несколько деталей, сделать снимок и затем отправить, пока не будет получен ответ, отображается диалоговое окно хода выполнения. При использовании соединений E или G весь процесс может быть довольно длительным (более минуты). Невозможно завершить действие и вернуться к предыдущему действию (что я и хочу) до получения ответа.

Какие варианты у меня есть. В настоящее время, если я нажимаю кнопку «Домой», процесс работает нормально и продолжает загружаться, можно ли минимизировать программируемость приложения? , Я вижу много проблем с этим подходом, например, если действие закрывается или происходит ошибка.

Единственный подход, который я могу придумать, - это перенести фактический код загрузки в службу, собрать информацию с помощью операции и разрешить операции запускать новую службу для каждой загрузки? Затем я могу уведомить пользователя об успехе или неудаче с помощью NotificationManager и обработать повторную попытку в службе.

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

Любая помощь / совет будет высоко ценится.

Привет

1 Ответ

14 голосов
/ 26 апреля 2011

Я предлагаю вам использовать следующую настройку:

  1. Используйте свою деятельность для подготовки (настройки / настройки) того, что пользователь хочет сделать (например, выберите изображение, которое он хочет загрузить, ипапка назначения)
  2. Когда пользователь нажимает кнопку «Отправить», вызывается служба, которая выполняет задачу загрузки.Я отмечу некоторые преимущества этого позже)
  3. Когда служба завершит работу, создайте уведомление для отображения результатов.Вы должны использовать OnGoingNotification, чтобы пользователь знал, что файл загружается (он также может иметь индикатор выполнения)

Использование службы вместо действия имеет некоторые преимущества.Например, вам не нужно беспокоиться об изменениях конфигурации (например, об изменении ориентации устройства), вы не «блокируете» пользователя в деятельности, где ему нечего делать и т. Д.

Для загрузки не требуется пользовательский интерфейс, поэтому использование активности - не лучший способ сделать это.

Короче говоря: использовать службу

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