如何正确销毁AsyncTasks?

时间:2014-09-25 00:16:52

标签: android android-asynctask

我遇到AsyncTasks问题。

我的应用程序很简单:带有自定义附加功能的ListView和Activity 在Activity类中,我有一些AsyncTasks和DefaultHttpClient(下载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);
        }
    }

3 个答案:

答案 0 :(得分:1)

调用

myAsyncTask.cancel(true);

将尝试取消该任务。调用此方法后,在AsyncTask's doInBackground()方法内,检查

isCancelled()

决定是停止还是继续。

答案 1 :(得分:1)

有一些技术可以利用AsyncTasks来避免这个问题。我建议你看一下Loaders(特别是AsyncTaskLoader)来处理管理状态的细微差别,而不是详细介绍这些技术。请看一下这个链接:http://developer.android.com/guide/components/loaders.html

答案 2 :(得分:0)

杀死asynctask的最简单方法

关闭HttpClient会自动停止http请求

httpclient.getConnectionManager().shutdown()