Загрузка большого файла в фоновом режиме (перезапуск службы при закрытии приложения)

Я хотел бы загружать большие файлы (~ 10 - 100 МБ Wi-Fi или мобильная сеть), но в фоновом режиме, потому что пользователь, возможно, выйдет из приложения, а позже система закроет приложение (если не достаточно памяти). Я создал для этого службу. случае, но моя проблема в том, что когда я убил приложение, служба перезапустилась и загрузка началась снова. Я нашел те же проблемы без решения:

сохранение фоновой службы после выхода пользователя из приложения

Моя служба перезапускается каждый раз при закрытии приложения

Так что это не сработает, но какое решение? Как работает приложение youtube ???


person Robertoq    schedule 02.01.2014    source источник
comment
Вы не можете заставить продолжать работать, но вы можете реализовать способ возобновления загрузки после того, как ваше приложение было убито.   -  person zapl    schedule 03.01.2014


Ответы (2)


Вы должны использовать службу переднего плана через метод startForeground(), если вас беспокоит возможность отключения службы.

Из документации по жизненному циклу службы:

  • Запущенная служба может использовать API startForeground (int, Notification), чтобы перевести службу в состояние переднего плана, когда система считает, что это что-то, о чем пользователь активно знает и, следовательно, не является кандидатом для уничтожения при нехватке памяти. (Теоретически служба все еще может быть отключена из-за чрезмерной нагрузки на память со стороны текущего приложения переднего плана, но на практике это не должно вызывать беспокойства.)
person corsair992    schedule 02.01.2014
comment
Это обработает большинство обычных случаев, но также помнит другие случаи, когда служба может прекратить работу, например, если устройство выключится. Было бы неплохо, если бы ваше приложение могло восстановиться и после этого. - person Matt; 07.01.2014

У вас есть контроль над сервером? Это похоже на:

Загрузка больших файлов через HTTP

В Google появилось предложение по проекту Gears:

https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal

Если вы можете использовать сервер / плагин / модуль, который позволяет использовать Ranged PUT, это ваш лучший выбор, в противном случае вам, возможно, придется свернуть свое собственное "разбиение" ... В зависимости от ваших инструментов и знаний, это может быть лучшим в любом случае, вы можете настроить его, чтобы оптимизировать его для ваших конкретных мобильных условий.

person Matt    schedule 02.01.2014
comment
Проблема здесь в том, как решить эту проблему на стороне Android .. скажем, вы хотите загрузить очень большой файл на S3 .. - person Amit Gupta; 19.01.2016