2015-03-03 70 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