2013-05-21 33 views
0

我想在应用程序被销毁时将注销信息发送到服务器。onDestroy()中的AsyncTask未被执行

下面的代码:

@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(); 
} 

但这里的日志,当我关闭从家里按钮的长按菜单中的应用:

enter image description here

我甚至无法调试这里。我放置断点,但它在调试时不会被解雇。

是否有任何理由,为什么AsyncTask不会从onDestroy()调用?

+0

如果“第三步”不记录,异常必须有发生在您的日志记录之前。请发布您的HttpPOSTer的代码和完整的logcat输出。 –

+1

把你的super.onDestroy()放在最后一个catch之后并且看到它。 – Rahil2952

+0

@WolframRittmeyer,抛出异常。发布整个logcat,请看看。我向你保证,HttpPOSTer类一切正常。 – azizbekian

回答

0

它不是一个好主意,在的onDestroy(使用asyntask),而不是你可以有扩展IntentService的活动,并从的onDestroy打个电话到活动

+0

那个是什么意思?你建议从onDestroy()开始一个新的意图?它应该怎么做? – azizbekian

+0

,因为在你从HttpPOSTer.logout获得返回值之前,你的活动将被销毁。 IntentService将完成任务并结束自己,所以把这段代码放在intentservice中,并且吐司显示注销标志 – prvn

+0

啊,的确,我忘了它!谢谢,我现在就试试。 – azizbekian