代码在postExecute中工作滞后但在doInBackground中不起作用?

时间:2015-06-17 19:39:11

标签: java android memory android-asynctask last.fm

我在asynctask类中使用last.fm api获取专辑封面。代码在postExecute()中有延迟,虽然它在doInBackground()中根本不起作用..它根本没有对我的UI进行更新,所以我不确定发生了什么

@Override
public Void doInBackground(String... args){

    if(oslist.size()!=0) {
        for (int i = 0; i < 30; i++) {

            String albumURL = null;

            try{
                 albumURL = new RetrieveAlbumArtUrlTask().execute(String.format(APIURL,
                         URLEncoder.encode(oslist.get(i).get(TAG_ARTIST), "UTF-8"),
                         URLEncoder.encode(oslist.get(i).get(TAG_ALBUM), "UTF-8"))).get();


            } catch (UnsupportedEncodingException e) {

            } catch (InterruptedException e) {

            } catch(ExecutionException e){

            }

            oslist.get(i).put("albumArtUrl", albumURL);
            Log.v("TEST", ""+albumURL);

        }
    }

    return null;
}

2 个答案:

答案 0 :(得分:0)

你有两个选择: 1.将要更新的数据返回到onPostExecute并从那里更新UI ..不要对postExecute进行长时间操作.. 2.如果你在Activity Class上运行它,你可以使用doInBackground中的RunOnUIThread函数并从中更新UI。

答案 1 :(得分:0)

AsyncTask以这种方式不起作用Teddy。 AsyncTask分为两部分。 doInBackground()段旨在处理非UI组件,因为它在UI线程之外工作。如果您需要在AsyncTask内对UI进行更改,请使用自定义标识符调用publishProgress()以区分要更新的内容。

我经常用枚举来做这件事。然后,您将看到您的UI更改发生以及您的非UI组件滞后于UI。请稍微阅读AsyncTask示例。