一段时间后,AsyncTask停止工作

时间:2014-11-16 17:39:46

标签: android android-asynctask httpurlconnection android-networking

我已经使用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 {

    }

}
}

我注意到的另一件事是,当我按下设备上的backhome按钮并返回主屏幕时,在LogCat中我看到了这个警告:

W/IInputConnectionWrapper(22155): showStatusIcon on inactive InputConnection

我认为只有在我不关闭连接时才会出现此警告,但始终在最终阻止内部调用connection.disconnect();。这可能是问题的一部分。

您认为什么可能是个问题?

UPDATE1

现在我注意到几分钟后我收到以下异常:

java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)

0 个答案:

没有答案