Java 如何与Glide同步加载位图?

Java 如何与Glide同步加载位图?,java,android,synchronization,android-glide,Java,Android,Synchronization,Android Glide,我想将Arwork图像加载到我的通知中(使用MediaStyle) 使用以下代码使我的应用程序崩溃,并出现错误: java.lang.IllegalArgumentException:必须在 背景线程 如有必要,我也愿意将库更改为UniversalImageLoader 另外 我使用此方法加载通知的图像。。。此通知是在服务中创建的,因此ui不会被中断!由于我没有通知ImageView的ID,我不知道如何用另一种方式设置它! 此外,我需要位图将其添加到MediaSession的MediaMetaD

我想将Arwork图像加载到我的通知中(使用
MediaStyle

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

java.lang.IllegalArgumentException:必须在 背景线程

如有必要,我也愿意将库更改为
UniversalImageLoader

另外

我使用此方法加载通知的图像。。。此通知是在服务中创建的,因此ui不会被中断!由于我没有通知ImageView的ID,我不知道如何用另一种方式设置它! 此外,我需要位图将其添加到MediaSession的MediaMetaData中

如何与Glide同步加载位图

如果您确实打算从主线程(也称为UI线程)检索网络映像,那么这将是一种不好的方法。需要相当长时间的操作应该从单独的线程执行,或者在更糟糕的情况下,它甚至可能导致ANR(应用程序无响应)状态

如果您需要Glide中的
位图
,您可以以异步方式完美地检索它,您可以这样做:

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);
                }
            });
Glide.with(mContext)
.加载(“http://example.com/imageurl")
.asBitmap()
.into(新的SimpleTarget(){
@凌驾
public void onResourceReady(位图资源、动画)
必须在后台线程上调用此方法


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

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) {}
}
不要忘记将此“定义”代码放在Manifest.xml中

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

您可以强制此方法在ui线程上运行。尽管您应该避免这种情况。答案对您有帮助吗?没有,我返回到了旧版本。这是否回答了您的问题?
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) {}
}
        <application ...
        <meta-data
        android:name="path.to.your.GlideConfModule"
        android:value="GlideModule" />