android 中从 URL 加载图像的正确方法是什么?

What is the correct way in android to load images from URL in a ListView without delay

我必须显示一个帖子列表,其中一些带有图片(想想 Twitter 之类的东西),当我在 ListView 上滚动时加载更多,但图片需要几秒钟才能出现。我怎样才能不拖延地做负载?目前我正在使用 Picasso

这是我的代码:

 ListView lv = findViewById(R.id.list_feed);
    arrayPosts = fillArray(data);
    adapter= new PostAdapter(this, arrayPosts);
    lv.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                             int totalItemCount) {

            int lastIndexInScreen = visibleItemCount + firstVisibleItem;

            if (lastIndexInScreen >= totalItemCount && totalItemCount > 0 && !isLoading) {
                isLoading = true;

                loadMore();
            }
        }
    });

    lv.setAdapter(adapter);

我的适配器的 getView() 方法:

public View getView(int i, View view, ViewGroup viewGroup) {

    Post post = (Post) getItem(i);
    view = LayoutInflater.from(context).inflate(R.layout.row_post_item, null);
    (...)

    Picasso.with(context).load(post.getImgProfile()).into(imgProfile);
    Picasso.with(context).load(post.getImagePost()).into(imgPost);

    (...)
    return view;
}

Picasso 是一种非常好的加载图像的方式,因为它具有缓存功能,我仍然建议您阅读此 answer 然后根据您的具体需要决定要使用哪个选项.

你不能毫不拖延地去做。下载速度取决于 Internet 连接和设备,因此必须存在一些延迟,除非您提前预先加载一页图像(大多数应用程序都是这样做的)。但即便如此,快速滚动也可能会导致一些延迟。

我建议 Glide。 它比毕加索快得多。它比 Picasso 更好地处理下载到内存和缓存利用率。它可以更好地处理 GIF,并防止出现令人讨厌的 OutOfMemoryError。当然你可以加载占位符直到你的图像加载等

Google甚至还推荐了它。

干杯