Android 异步任务刷新图像视图

Android 异步任务刷新图像视图,android,android-asynctask,Android,Android Asynctask,我使用AsyncTask类执行任务并显示ImageView。 但我每10秒执行一次此任务,为此,我在中调用相同的任务: onPostExecute()方法 这是工作,但是imageView在10秒后刷新,为什么 这是我的代码: @Override protected void onPostExecute(Void result) { ProgressBar progress = (ProgressBar) rootView.findViewById(R.id.p

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

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

这是我的代码:

    @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();
    }
@覆盖
受保护的void onPostExecute(void结果){
ProgressBar progress=(ProgressBar)rootView.findviewbyd(R.id.progress);
progress.setVisibility(View.GONE);
ImageView=(ImageView)rootView.findViewById(R.id.myView);
imageView.setLayerType(View.LAYER\u TYPE\u软件,空);
SVG;
InputStream=null;
试一试{
is=新文件输入流(mySVG);
svg=svg.getFromInputStream(is);
Drawable Drawable=新的PictureDrawable(svg.renderToPicture());
imageView.setImageDrawable(可绘制);
}捕获(SVGParseException e){
e、 printStackTrace();
}catch(filenotfounde异常){
e、 printStackTrace();
}
imageView.refreshDrawableState();
长启动=System.currentTimeMillis();
而((System.currentTimeMillis()-start)<10000){
}
AsyncTask t=新任务(rootView).execute();
}

这段代码在10秒后刷新imageView,但我会立即刷新,等待10秒,然后执行另一个任务…

哇,您正在使用
异步任务
,然后在
onPostExecute()中“吃掉CPU”


我认为这不是一个好主意,因为当你在你的代码中放入一个循环命令并且从不破坏它时,你将把你的代码锁定在一个特定的线程中。小心
while ((System.currentTimeMillis() - start) < 10000) {
}
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);
}