AsyncTask在启动应用程序时出现了奇怪的延迟

时间:2011-08-22 16:41:33

标签: android android-asynctask

我有一个AsynTask实现,当我从设备启动应用程序时,应用程序有延迟。这个延迟在第一次运行时从不出现,但总是在第一次运行后出现,所以如果我杀了应用程序并在6分钟内回到它,它将启动连接并且永远不会完成它。

这是我的AsyncTask:

private class MakeConnection extends AsyncTask<String, Void, String>  {

    Context context;
    ProgressDialog myDialog;

    public MakeConnection(Context conetext)
    {
        this.context = conetext;
        myDialog = new ProgressDialog(this.context);
    }

    @Override
    protected String doInBackground(String... urls) {
        String response = "";
        for(String url : urls)
        {
            try
            {
                URL theUrl = new URL(url);
                URLConnection ucon = theUrl.openConnection();
                ucon.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                InputStream is = ucon.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                ByteArrayBuffer baf = new ByteArrayBuffer(50);
                int current = 0;
                while(((current = bis.read()) != -1) && !isCancelled())
                {
                    baf.append((byte)current);
                }
                response = new String(baf.toByteArray());

            }
            catch (Exception e)
            {
                response = e.getMessage();
            }

        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        try {
            myDialog.dismiss();
            success(result);
        }catch(JSONException e)
        {
            data = e.toString();
        }
    }

    @Override
    protected void onPreExecute(){
        myDialog = ProgressDialog.show(
                context,
                "Please wait...",
                "Loading the data",
                true,
                true,
                new DialogInterface.OnCancelListener(){
                    @Override
                    public void onCancel(DialogInterface dialog) {
                        MakeConnection.this.cancel(true);
                    }
                }
        );
    }
}

然后在我的onCreate()

task = new MakeConnection(this);
task.execute(new String[] {url});

我不明白为什么会发生这种情况?

编辑:

当应用程序第一次启动时它运行良好,但是当我稍后再打开应用程序时,上面看到的第一个连接会执行以下操作:

  • 它启动进度对话框然后我不知道它是否实际建立连接,因为我看到的只是进度对话框永远不会消失,换句话说它永远不会完成连接,因为如果连接完成了进度对话框将完成

1 个答案:

答案 0 :(得分:0)

我发现问题在于服务器获取请求,我所做的是添加一个计时器来刷新连接,如果花了很长时间。