【发布时间】:2014-08-24 10:27:13
【问题描述】:
我有一个Activity A,它有一个按钮。点击按钮,它会打开另一个Activity B,它显示从服务器(http)获取的数据。我使用的API 版本是15。
Activity B 打开后,在onCreate() 方法中,我将调用以下代码行。
asyncFetch = new AsyncFetch();
asyncFetch.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
此Async 任务执行http 通信以从服务器获取数据。
@Override
protected Object doInBackground(Object... params) {
...
defaultHttpClient = new DefaultHttpClient();
httpPost = new HttpPost(theURL);
...
HttpResponse response = defaultHttpClient.execute(httpPost);
...
return response...;
}
获取数据后,会填充 UI。
onBackPressed() 和home 按钮,我正在调用以下代码来取消Async 任务。
asyncFetch.cancel(true);
点击后退按钮或主页按钮时,Async 任务不会被取消,UI 会等待异步任务完成,然后返回父 Activity。
不使用execute() 的原因是因为我有几个Async 任务正在运行,我不希望这个任务等待其他Async 任务完成。
谁能告诉我如何取消这个异步任务?任何帮助表示赞赏。
【问题讨论】:
-
AsyncTasks,是我看到越来越少使用的东西。他们在 Activity 生命周期中存在问题。我会建议 Volley(非常好)或使用 IntentService,因为这些与生命周期无关。
-
要添加到@SergeyBenner的评论,具体看第二个答案
标签: android android-asynctask androidhttpclient asynchttpclient