Каков наиболее оптимальный способ загрузки больших данных на сервер из приложения для Android?

У меня есть приложение для Android, которое нужно загружать, загружать файлы данных размером от 10 до 12 МБ относительно часто. Учитывая, что мое приложение более популярно в таких странах, как Индия, где может быть плохое подключение к Интернету, я работаю со следующими ограничениями.

  • Пользователь не может быть подключен к интернету 24x7
  • Взаимодействие пользователя не зависит от успешности загрузки/выгрузки.

Это приложение для написания стихов, в котором мы загружаем новые стихи на телефоны пользователей и загружаем стихи пользователей на наш сервер всякий раз, когда мы подключены к Интернету.

Я понимаю, что с помощью "com.loopj.android.http.AsyncHttpClient;" для общения, но мне было интересно, есть ли лучшие альтернативы, которые могут сделать следующее:

  • Должен ли я запустить службу, которая предоставляет интерфейсы для загрузки/выгрузки?
  • Можно ли делать это в фоновом режиме, даже если пользователь не использует приложение?

person Akshar Prabhudesai    schedule 13.06.2014    source источник
comment
10-12 мб относительно часто? Вы говорите мне, что хотите, чтобы каждый пользователь повторно загружал всю базу данных стихов каждый раз, когда эта база данных обновляется? Разве вы не должны просто загружать обновления данных (а не всю базу данных каждый раз)?   -  person Stephan Branczyk    schedule 14.06.2014
comment
И почему у вас такие же требования для загрузки? Действительно ли каждый пользователь будет загружать сразу тысячи стихов? Я сомневаюсь в этом. И даже если некоторые из них это сделают, они могут предпочесть использовать настоящий ПК, когда им нужно выполнить большую партию загрузок.   -  person Stephan Branczyk    schedule 14.06.2014
comment
Ребята, давайте не будем вдаваться в подробности, почему это 10-12 МБ и хорошо это или нет. Остановимся на заданном вопросе.   -  person Eastern Monk    schedule 14.06.2014


Ответы (1)


Да, вам следует использовать службу, в частности службу переднего плана ( для отображения уведомления о ходе загрузки). Кроме того, служба переднего плана вряд ли будет уничтожена Android:

... система считает, что это то, о чем активно знает пользователь, и, следовательно, не является кандидатом на уничтожение при нехватке памяти.

Для загрузки Android предоставляет готовое решение под названием Менеджер загрузки. Он уже включает в себя возможность возобновить загрузку в случае потери соединения.

Для загрузок не существует эквивалента (по крайней мере, насколько мне известно). Вам придется развернуть свое собственное решение, возможно, с использованием HTTP-заголовка Content-Range. Это во многом зависит от вашего сервера, например, у Google Диска есть API для этого< /а>. Также взгляните на Возобновить загрузку/загрузку файла после потери соединения ( Программирование сокетов) (хотя это и с сокетами, концепции более или менее одинаковы).

Другой вариант — использовать SyncAdapter для этой задачи. См. раздел Перенос данных с помощью адаптеров синхронизации. Я не уверен, поддерживает ли это возобновление.

person matiash    schedule 13.06.2014