如何使用 Glide 同步加载位图?

How can I load a Bitmap synchronously with Glide?

我想将 Arwork-Image 加载到我的通知中(使用 MediaStyle)。

使用以下代码会使我的应用程序崩溃并出现错误:

java.lang.IllegalArgumentException: You must call this method on a background thread

public Bitmap getAlbumArtwork(long albumID, int Height, int Width) {
    try {
        return Glide.with(mContext).load(getAlbumArtworkUri(albumID)).asBitmap().error(R.drawable.standardartwork).into(Width, Height).get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    return null;
}

我也愿意换图书馆,例如到 UniversalImageLoader,如有必要!

另外

我用这个方法加载通知的图片...这个通知是在服务中创建的,所以ui不会被打断!因为我没有通知 ImageView 的 ID,所以我不知道如何以其他方式设置它! 此外,我需要位图将其添加到 MediaSession 的 MediaMetaData。

How can I load a Bitmap syncronously with Glide?

如果您确实打算从主线程(又名 UI 线程)检索网络图像,那将是一种 糟糕的 方法。需要大量时间的操作应该从单独的线程执行,或者在更坏的情况下甚至会导致 ANR(应用程序无响应)状态。

如果你需要 Glide 的 Bitmap,你可以通过异步的方式完美地获取它,你可以这样做:

Glide.with(mContext)
            .load("http://example.com/imageurl")
            .asBitmap()
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    // you can do something with loaded bitmap here

                    // .....

                    holder.mImageView.setImageBitmap(resource);
                }
            });

You must call this method on a background thread

val bitmap = Glide.with(CONTEXT)
            .asBitmap()
            .load("URL")
            .submit().get()

我有同样的问题,我的目标服务器是单线程嵌入式设备,所以我们需要一个一个地发送请求。经过一番研究,我发现这项工作适合我。

public class GlideConfModule implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //The number "1" make things happen.
        builder.setResizeService(new FifoPriorityThreadPoolExecutor(1));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {}
}

忘了把这个 'define' 代码放到你的 Manifest.xml

        <application ...
        <meta-data
        android:name="path.to.your.GlideConfModule"
        android:value="GlideModule" />

顺便说一句,我使用 Glide 3.x