我一直在搜索相关信息,但是没有找到我想要的答案。我知道使用AskyncTask
可以通过.cancel(true)
来取消任务,但前提是我需要一个循环来检查值isCanceled()
。
但是我的问题是,如果用户按下返回键,该如何取消被卡在httpclient.execute()
中的AsyncTask
?如果用户离开当前Activity并进入另一个Activity,我不希望有未受控制的AsyncTask在运行,因为这可能会导致内存问题。用户可能会来回切换并创建不确定数量的任务,所以我想关闭它们。有人知道方法吗?以下是我用于连接的代码:
public class Test extends Activity {
@Override
protected void onStart() {
super.onStart();
new ConnectionTask().execute("https://www.mywebserver.com/webservice.php?param1=test");
}
private class ConnectionTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
try {
HttpClient httpclient = DefaultHttpClient(params,clientConnectionManager);
HttpPost httpPost = new HttpPost(params[0]);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null)
return EntityUtils.toString(httpEntity);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}
你知道我在onStop()里应该添加什么来取消正在进行的httpClient.execute()函数吗?有时会陷入几乎永久的卡顿状态。
非常感谢你的帮助,提前感谢。
更新
如果我关闭ConnectionManager,我需要重新进行https握手,对吗?看一下我创建httpClient的代码,我用这个来处理https:
HttpClient httpclient = DefaultHttpClient(params,clientConnectionManager);
感谢大家快速回复并提供的各种解决方案。我将尝试使用超时(以免等待过久)+ cancel()
函数来避免处理onPostExecute
。如果结果符合预期,我会告诉大家的!非常感谢大家!