AsyncTask刷新imageView

时间:2015-03-03 10:20:34

标签: android android-asynctask

我使用AsyncTask类来执行任务并显示ImageView。 但是我每隔10秒就执行一次这个任务,为此我在同一个任务中调用: onPostExecute()方法。

这是工作但是10秒后imageView会刷新,为什么?

这是我的代码:

    @Override
    protected void onPostExecute(Void result) {

        ProgressBar progress = (ProgressBar) rootView.findViewById(R.id.progress);
        progress.setVisibility(View.GONE);

        ImageView imageView = (ImageView) rootView.findViewById(R.id.myView);
        imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

        SVG svg;
        InputStream is = null;

        try {
            is = new FileInputStream(mySVG);
            svg = SVG.getFromInputStream(is);
            Drawable drawable = new PictureDrawable(svg.renderToPicture());
            imageView.setImageDrawable(drawable);
        } catch (SVGParseException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        imageView.refreshDrawableState();

        long start = System.currentTimeMillis();

        while ((System.currentTimeMillis() - start) < 10000) {
        }

        AsyncTask<Object, Integer, Void> t = new Task(rootView).execute();
    }

此代码在10秒后刷新imageView,但我会立即刷新,等待10秒并执行另一个任务......

1 个答案:

答案 0 :(得分:0)

哇,你在AsyncTask

中使用onPostExecute()然后“吃CPU”
while ((System.currentTimeMillis() - start) < 10000) {
}

不要这样做。

使用Handler / Runnable组合。

以下是一个例子:

在你的Activity中:

private Handler timerHandler;
private Runnable timerRunnable;

// ...

@Override
public void onCreate() {
    super.onCreate();
    timerHandler = new Handler();
    timerRunnable = new Runnable() {
        @Override
        public void run() {
            // do your refresh here
            timerHandler.postDelayed(timerRunnable, 10000);
        }
    };
    timerHandler.post(timerRunnable);
}