2012-09-22 10 views
8

私はリストに画像を読み込むためのImageローダーを作っています。そのため、スムーズにするためには、画像をビューに設定する点を除いてすべてバックグラウンドスレッドで実行する必要があります。 問題は、コード内の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スレッドからpost(...)を呼び出す必要があります。これは問題になる可能性があります。

+4

私はView.postをHandler.postに置き換えました。今はバターのように動作するようです。 – martinpelant

関連する問題