2015-03-03 45 views
-1

我使用AsyncTask类执行任务并显示ImageView。 但是我每10秒执行一次这个任务,对于这个我调用相同的任务: onPostExecute()方法。AsyncTask refresh imageView

这是工作,但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(); 
    } 

此代码刷新10秒后的ImageView的,但我会立即刷新,等待10秒,执行其它的任务......

+0

我认为这不是一个好主意,怎么当你把一个循环命令在你的代码,从来没有打破它,你将锁定你的代码在特定的线程中。小心 – 2015-03-03 10:42:08

+0

使用延迟加载。 – 2015-03-03 10:42:36

回答

0

哇,你在onPostExecute()

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

使用AsyncTask再“吃CPU”不要这样做。

使用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); 
} 
+0

woooow谢谢:) – Franck 2015-03-03 10:47:43