应用程序冻结对Glide的调用commit()。get()

时间:2019-01-13 01:33:16

标签: java android multithreading google-maps android-glide

我正在尝试为我的Google Map创建一个自定义群集图标。 我之前曾尝试扩展AsyncTask,并使用execute()。get()从Submit()。get()检索可绘制对象,但与实现Callable相同。我也尝试过从load(uri).into(imageView)获取ImageView,但是在其余的代码之后操作已完成。

final List<Drawable> profilePhotos = new ArrayList<>(Math.min(4, markerCluster.getSize()));

for (MarkerCluster p : markerCluster.getItems()) {
//                         Draw 4 at most.
    if (profilePhotos.size() == 4) break;
    final Uri bitmapUri = Uri.parse(p.getDescription());
    Drawable drawable = null;GlideBitmapBuilder(bitmapUri));

    try {
        drawable = Executors.newSingleThreadExecutor().submit(new GlideBitmapBuilder(bitmapUri)).get();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        drawable.setBounds(0, 0, 200, 200);
        profilePhotos.add(drawable);
}
MultiDrawable multiDrawable = new MultiDrawable(profilePhotos);
multiDrawable.setBounds(0, 0, 200, 200);
clusterImage.setImageDrawable(multiDrawable);
Bitmap icon = clusterIcon.makeIcon(String.valueOf(markerCluster.getSize()));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));

其中GlideBitmapBuilder类为:

private class GlideBitmapBuilder implements Callable<Drawable> {

        Uri bitmapUri;

        private GlideBitmapBuilder(Uri bitmapUri) {
            this.bitmapUri = bitmapUri;
        }

        @Override
        public Drawable call() throws Exception {
          drawable = GlideApp.with(getApplication()).load(bitmapUri).submit(200, 200).get();
            return drawable;
        }
    }

预期结果应该是成功返回drawable变量,从该位置我可以为群集创建图标,但是最终从GlideApp获得drawable时冻结了。

我对如何处理此问题一无所知,因此任何帮助都会很大。有没有一种方法可以使commit()。get()不冻结?还是有更好的渲染群集图标的方法?

非常感谢您

0 个答案:

没有答案