我已经使用AsyncTask已经有一段时间了,并且在这种情况下它在一段时间后从未停止工作。在我第一次打开我的应用程序后,一切正常,我可以多次执行AsyncTask。
问题出在我关闭应用程序并让设备静止几分钟后,AsyncTask变得无法执行。通常需要1-2秒才能加载数据,但在这种情况下需要几分钟。
这是我的AsyncTask:
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 {
}
}
}
我注意到的另一件事是,当我按下设备上的back
或home
按钮并返回主屏幕时,在LogCat中我看到了这个警告:
W/IInputConnectionWrapper(22155): showStatusIcon on inactive InputConnection
我认为只有在我不关闭连接时才会出现此警告,但始终在最终阻止内部调用connection.disconnect();
。这可能是问题的一部分。
您认为什么可能是个问题?
UPDATE1
现在我注意到几分钟后我收到以下异常:
java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)