AsyncTask в onDestroy() не выполняется

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

Вот код:

@Override
protected void onDestroy() {
    try {
        Log.i("myApp", "Activity destroyed");
        SharedPreferences prefs1 = getSharedPreferences("com.my.app", Context.MODE_PRIVATE);
        Log.i("myApp", "step1");
        String response;
        Log.i("myApp", "step2");
        response = HttpPOSTer.logout(EventCodes.LOGOUT, LOGOUT_EVENTCODE, prefs.getString("sessionID", "null"));
        Log.i("myApp", "step3");
        if (response.equals("logout")) {
            Log.i("myApp", "logged out succesfully");
        } else {
            Log.i("myApp", "couldn't perform logout");
        }
        prefs1.edit().clear().commit();
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    } 
    catch (ExecutionException e) {
        e.printStackTrace();
    }   
    super.onDestroy();  
}

Но вот журнал, когда я закрываю приложение из меню долгого нажатия кнопки «Домой»:

введите здесь описание изображения

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

Есть ли причина, по которой AsyncTask не звонят из onDestroy()?


person azizbekian    schedule 21.05.2013    source источник
comment
Если шаг 3 не записывается в журнал, перед вашим оператором регистрации должно произойти исключение. Пожалуйста, опубликуйте код вашего HttpPOSTer и полный вывод logcat.   -  person Wolfram Rittmeyer    schedule 21.05.2013
comment
поместите свой super.onDestroy() после последнего улова и посмотрите его.   -  person Rahil2952    schedule 21.05.2013
comment
@WolframRittmeyer, исключений не возникает. Выложил весь логкэт, посмотрите пожалуйста. Уверяю вас, с классом HttpPOSTer все в порядке.   -  person azizbekian    schedule 21.05.2013
comment
@ Rahil2952, я тоже пробовал это, у меня это не сработало.   -  person azizbekian    schedule 21.05.2013
comment
каково значение ответа? Поместите туда журнал и проверьте его значение.   -  person Rahil2952    schedule 21.05.2013
comment
@ Rahil2952 Rahil2952, дело в том, что ответ никогда не получает значения, другими словами, logoout() никогда не вызывается, и поэтому шаг 3 никогда не регистрируется. Вопрос в том, почему эта асинхронная задача не выдает никаких исключений?   -  person azizbekian    schedule 21.05.2013


Ответы (1)


не рекомендуется использовать asyntask в onDestroy(), вместо этого вы можете иметь действие, которое расширяет IntentService, и вызывать это действие из onDestroy

person prvn    schedule 21.05.2013
comment
Какой в ​​этом смысл? Вы предлагаете начать новое намерение с onDestroy()? И что он должен делать? - person azizbekian; 21.05.2013
comment
потому что до того, как вы получите возвращаемое значение из HttpPOSTer.logout, ваша активность будет уничтожена. IntentService выполнит задачу и завершит свою работу, поэтому поместите этот код в службу намерений и отобразите всплывающее уведомление о выходе из системы. - person prvn; 21.05.2013
comment
Ах, действительно, я забыл об этом! Спасибо, сейчас попробую. - person azizbekian; 21.05.2013