我遇到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);
}
}
答案 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()