Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncTask在一段时间后停止工作_Android_Android Asynctask_Httpurlconnection_Android Networking - Fatal编程技术网

Android AsyncTask在一段时间后停止工作

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

我已经使用AsyncTask一段时间了,它在一段时间后从未停止工作,就像在本例中一样。在我第一次打开我的应用程序后,一切正常,我可以多次执行异步任务

问题是,在我关闭应用程序并将设备静止几分钟后,AsyncTask将无法执行。加载数据通常需要1-2秒,但在这种情况下需要几分钟

这是我的任务:

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)