java线程的疑惑

@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                initView();
                downloadImg();//这里有一个下载线程

                String key = hasKeyForDisk(imageUrl);

                try {

                        DiskLruCache.Snapshot snapShot = diskLruCache.get(key);
                        if (snapShot != null) {
                                InputStream is = snapShot.getInputStream(0);
                                Bitmap bitmap = BitmapFactory.decodeStream(is);
                                imageView.setImageBitmap(bitmap);
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }

downloadImg();下载一个大图片,我想问问,下面的逻辑会不会等这个线程下载完才执行呢?如果不会,那下面的逻辑需要下载的文件,怎么处理?

现在的问题是能下载文件,但是imageView.setImageBitmap(bitmap);不能显示图片....

阅读 2.8k
2 个回答

你这个是安卓更新ui的问题。图片可以下载,在下载图片的时候下面的代码会执行,所以还没有等图片下载完你后面的代码已经执行,图片加载不了。可以用handler,或者异步任务,或者把需要更新的view传入进入,或者使用回调。

我不懂Android,所以这段代码我看不懂,但是Java代码都是一个逻辑,我说说我遇到这种问题的解决思路。

  1. 首先查看downloadimg()方法源码,看看里面是同步的实现还是异步的实现(区别就是是是在当前线程执行,还是单独开启另外一个线程或者丢入线程池)。

  2. 然后查看diskLruCache.get(key)访问的文件在执行时是否已存在

总之我觉得遇到这种代码问题直接查看源码比什么都快,而且也是最好的方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题