Android AsyncTask在一段时间后停止工作
我已经使用AsyncTask一段时间了,它在一段时间后从未停止工作,就像在本例中一样。在我第一次打开我的应用程序后,一切正常,我可以多次执行异步任务 问题是,在我关闭应用程序并将设备静止几分钟后,AsyncTask将无法执行。加载数据通常需要1-2秒,但在这种情况下需要几分钟 这是我的任务:Android AsyncTask在一段时间后停止工作,android,android-asynctask,httpurlconnection,android-networking,Android,Android Asynctask,Httpurlconnection,Android Networking,我已经使用AsyncTask一段时间了,它在一段时间后从未停止工作,就像在本例中一样。在我第一次打开我的应用程序后,一切正常,我可以多次执行异步任务 问题是,在我关闭应用程序并将设备静止几分钟后,AsyncTask将无法执行。加载数据通常需要1-2秒,但在这种情况下需要几分钟 这是我的任务: class MyAsyncTask extends AsyncTask<String, Void, ArrayList<MyObject>> { private ProgressD
class MyAsyncTask extends AsyncTask<String, Void, ArrayList<MyObject>> {
private ProgressDialog dialog;
private FragmentActivity context;
public MyAsyncTask(FragmentActivity activity) {
context = activity;
dialog = new ProgressDialog(context);
}
protected void onPreExecute() {
this.dialog.setMessage("...");
this.dialog.show();
}
@Override
protected ArrayList<MyObject> doInBackground(String... params) {
HttpURLConnection connection = null;
ArrayList<MyObject> objects = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
return null;
}
String line;
objects = new ArrayList<MyObject>();
MyObject mo = new MyObject();
while ((line = reader.readLine()) != null) {
// Process data
}
reader.close();
} catch (Exception e) {
return null;
} finally {
if (connection != null)
connection.disconnect();
}
return objects;
}
@Override
protected void onPostExecute(ArrayList<MyObject> data) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (data == null) {
Toast.makeText(context, "fail", Toast.LENGTH_SHORT).show();
}
else {
}
}
}
我认为只有当我不关闭连接,而是connection.disconnect()时,才会出现此警告代码>始终在finally块内调用。这可能是问题的一部分
你认为会有什么问题
更新1
现在我注意到,几分钟后,我收到以下异常:
java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
请在代码中添加Log.d()语句,以查看实际执行的代码。尤其是在最后一个街区。当请求的页面被完全读入时,将调用finally块。当你完成你的活动时。如果需要,您可以取消onPause()中的异步任务。@greenapps,它将执行到connection=(HttpURLConnection)url.openConnection()代码>。InputStream in=connection.getInputStream()之后的Log.d()代码>未执行。所以,问题是我无法获取输入流。我没有看到Log.d()。请将它们添加到您的代码中,然后告诉我们最后看到的是哪一个。目前还不清楚最后一次完全执行的是哪条语句。请将日志语句也添加到catch块。张贴日志,因为会有东西要看。。
java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)