2014-09-25 61 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()