Как вызвать веб-сервис (запрос Http), когда приложение убито, проводя пальцем в Android?

Вопрос/Требование

Как вызвать веб-службу (HTTP-запрос), когда приложение убито пролистыванием в Android?

Когда я убиваю приложение, проводя пальцем по списку последних приложений, я хочу вызвать веб-службу (или AsyncTask).

Что я использовал?

Я пытаюсь вызвать AsyncTask при уничтожении активности.

AsyncTask содержит запрос WebApi (с использованием DefaultHttpClient).

Вот такой код...

@Override
protected void onDestroy() {
    String url = "<webapi-url here>";
    new GetResponse().execute(url);
    super.onDestroy();
}

Я не использую никаких фоновых служб.

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

Если есть какое-то решение, пожалуйста, поделитесь здесь.


person Darshak    schedule 11.06.2015    source источник


Ответы (3)


Вы можете написать компонент службы Android, который переопределяет метод onTaskRemoved(), который будет запускаться всякий раз, когда приложение удаляется путем смахивания из недавних. Таким образом, вы можете попробовать это решение и убедиться, что оно соответствует вашим требованиям.

person siva    schedule 11.06.2015
comment
для ‹ 14 платформ вы можете попробовать странную логику, когда служба будет просыпаться каждые 5 секунд или около того и запрашивать информацию о запущенных задачах. Если ваше приложение отсутствует в информации о запущенной задаче, вы можете отправить сообщение с помощью веб-сервиса. эта служба будет работать как другое приложение, и эта логика работает только на более старых платформах, вплоть до kitkat. Это не рекомендуемый подход, поскольку он разряжает вашу батарею. - person siva; 12.06.2015

Нет, нет надежного способа узнать, было ли ваше приложение остановлено другим процессом. Весь смысл "убийства" приложения заключается в том, чтобы завершить его работу как можно скорее, не дав ему запустить какой-либо код.

Если вам нужно больше, см. раздел Действие приложения, уничтоженного в Android.

person shkschneider    schedule 11.06.2015

У вас есть похожий пост, в следующий раз поищите немного, пожалуйста, но вы можете увидеть эти сообщения: AsyncTask всегда будет работать, даже если приложение будет уничтожено. ? или Асинхронная задача останавливается, когда приложение завершает работу (вызывается onDestroyed).

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

person Merlí Escarpenter Pérez    schedule 11.06.2015
comment
Другой способ - использовать службу намерений! :) - person Merlí Escarpenter Pérez; 11.06.2015
comment
Служба намерений - это служебное приложение, если приложение дает сбой или уничтожается, служба намерений никогда не умирает ... Но я думаю, что это много работы, чтобы сделать httprequest, сесть и подумать, что это хорошая идея, прежде чем усложнять код. Все приложения синхронизируются много раз, прежде чем умереть. Синхронизация перед уничтожением приложения не требуется в 95% случаев, вы можете синхронизировать в OnResume, OnPause (это время, когда приложение выходит на первый уровень) или когда пользователь перемещается в пользовательском интерфейсе, например... - person Merlí Escarpenter Pérez; 11.06.2015