2012-09-22 169 views
8

我正在製作一個用於將圖像加載到列表的圖像加載器 - 因此爲了使圖像平滑,除了將圖像設置爲視圖之外,一切都需要在後臺線程中運行。 問題是,下面的代碼中的Runnable有時不會被執行。 我從後臺線程調用setImage方法。View.post()未被調用?

protected void setImage(final ImageView img, final Bitmap bm, String hash) { 
    img.setTag(TAG_RESPONSE, hash); 
    Log.v(TAG, "setting image bitmap1"); 
    //TODO: here is the bug - sometimes the runnable below is not called 
    img.post(new Runnable() { 

     @Override 
     public void run() { 
      Log.v(TAG, "setting image bitmap2"); 
      img.setImageBitmap(bm); 
      img.invalidate(); 
     } 
    }); 

} 

任何人有任何想法我做錯了什麼?

回答

13

根據documentation,只有在視圖連接到窗口時,才應該從非UI線程調用帖子(...)。這可能是問題所在。

+4

我用Handler.post替換了View.post,它現在似乎像黃油一樣工作。 – martinpelant