2014-09-25 60 views
1

我有問題與AsyncTasks。如何正確銷燬AsyncTasks?

我的應用程序很簡單:ListView和活動定製的附加功能。
在Activity類我有DefaultHttpClient一些AsyncTasks(下載Jsons,圖像)

當我等到的AsyncTask負載的一切,然後再返回到列表,然後選擇另一行,一切都很好。

但是如果我開始我的活動,並立即按「返回」,然後選擇另一行,則新的活動啓動,但與以前的AsyncTask(不良的圖像和字符串)的任務。 一段時間後,一切恢復正常(AsyncTask下載適當的內容),但我想避免下載不必要的數據。

如何沒有停止,而是永久刪除的AsyncTask當我按下「返回」?或者也許是另一種方式?

我將不勝感激。

編輯: 當然我用取消方法:
Activity.class

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    lastFM.cancel(true); 
} 

AsyncTask.class

@Override 
    protected String doInBackground(String... urls) { 
     if (isCancelled()) return null; 
     inputStream = getInputStreamFromHttp(urls[0]); 
     if (isCancelled()) return null; 
     jsonObject = getJSONObjectFromInputStream(inputStream); 
     bio = getBioFromJSON(jsonObject); 
     return bio; 
    } 
@Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     if (!isCancelled()) { 
      Intent i1 = new Intent(ActivityStation.UPDATEFRAGMENT3).putExtra(ActivityStation.ARTISTBIO, s); 
      LocalBroadcastManager.getInstance(context).sendBroadcast(i1); 
     } 
    } 

回答

1

調用

myAsyncTask.cancel(true); 

將嘗試取消任務。在此之後被調用,該AsyncTask'sdoInBackground()方法中,檢查

isCancelled() 

來決定是否停止或繼續。

+0

我用這個,但它仍然是同樣的問題。 – CodeNinja 2014-09-25 09:46:42

+0

你的意思是即使取消後isCancelled也會返回false? – 2014-09-25 09:55:30

+0

**從參考:** *調用此方法保證onPostExecute(對象)則永遠不會調用* 那麼爲什麼叫? – CodeNinja 2014-09-25 11:54:29

0

殺的AsyncTask

Shoutdown的HtppClient最簡單的方法,將自動停止HTTP請求

httpclient.getConnectionManager().shutdown()