2013-05-21 87 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