如何使用 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
我想将 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