asynctask停止主线程

时间:2013-09-13 06:52:58

标签: android android-asynctask

在我的应用程序中,我从asynctask获取来自互联网的天气信息,但有时服务器有点滞后,我想要最多10个请求(如果以前是不成功的),请求之间等待10秒。但当我让我的asynctask等待10秒(建模不响应服务器)时,主线程(用户界面)冻结,直到asynctask完成它的工作(发出10轮请求)。

这是我制作和执行asynctask的代码

WeatherGetter wg = new WeatherGetter();
    wg.execute(url);
    try {
        weather = wg.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

这就是我等待的地方

if (cod != 200) {
            synchronized (WeatherGetter.this) {
                try {
                    WeatherGetter.this.wait(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

试试这种方式

不要等待线程

如果代码!= 200,则递归调用相同的函数

private void loadWhetherData(final int count) {

        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                WeatherGetter wg = new WeatherGetter();
                wg.execute(url);
                try {
                    weather = wg.get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                if (cod != 200 && count<10) {
                    loadWhetherData(++count);
                }
                return null;
            }
        }.execute();

    }

拨打

此方法将调用10次,直至不成功

loadWhetherData(1);