View.post()没有调用?

mar*_*ant 12 android

我正在制作一个Image加载器,用于将图像加载到列表中 - 所以为了使它平滑,除了将图像设置为视图外,所有内容都需要在后台线程中运行.问题是代码中的Runnable有时不会被执行.我从后台线程调用setImage方法.

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();
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

任何人都有任何想法我做错了什么?

fhu*_*cho 18

根据文档,仅当View附加到窗口时,才应从非UI线程调用post(...).这可能是问题所在.

  • 我用Handler.post替换了View.post,它现在看起来像黄油一样. (6认同)
  • 在我的例子中,`View.post` 在`Android 7` 中工作,但在`Android 4` 中不起作用。我点击了以下链接,`Handler.post` 也对我有用:[link](https://techblog.appnexus.com/weird-android-bug-160d76dd7bc) 正如链接所说,我创建了如下处理程序:`Handler handler = new Handler(Looper.getMainLooper());` (2认同)