更快地从 Firebase 存储下载图像

Downloading Images from Firebase Storage Faster

我的 Firebase 存储的当前架构结构如下:

Photos_folder/
-->users ID 01 --> profile_picture_folder/--> image/jpeg (URI)
-->users ID 02
-->users ID 03
--> ect...

在我的适配器中,我有一个 onBindViewHolder 方法,我在其中传递我的 URI 并通过 Firebase 存储网络检索 uri 图像:

@Override
public void onBindViewHolder(@NonNull final CommentViewHolder holder, int position) {
    Uri imageUri = Uri.parse(list.get(position).getImageUri());

    photosStorageReference = FirebaseStorage.getInstance().getReference();
    photosStorageReference.child(Constant.PHOTOS_FIREBASE).child(userId)
            .child(Constant.USER_PROFILE_PICTURE_FOLDER).child(imageUri.getLastPathSegment())
            .getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            SimpleTarget target = new SimpleTarget<Bitmap> (200, 200) {
                @Override
                public void onResourceReady(@NonNull Bitmap bitmap, @Nullable Transition<? super Bitmap> transition) {
                    imageView.setImageBitmap(bitmap);
                }
            };
            GlideApp.with(context).asBitmap().load(uri).diskCacheStrategy(DiskCacheStrategy.DATA).apply(
                    RequestOptions.circleCropTransform()).into(target);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, e.getMessage());
        }
    });
}

问题:
一切正常,但是,onSuccess 方法在主线程中执行工作并且它是同步的,因此应用程序在每次图像检索之间等待。

有没有办法更快地从 Firebase 检索图像?

可能喜欢在更高的参考级别上建立与 Firebase 的连接,例如:
gs://appname-b4532.appspot.com/Photos/

连接打开后,遍历用户 ID 并在遍历子路径的同时检索他们各自的图像?

userId01/Profile_picture_folder/image_01
userId02/Profile_picture_folder/image_02
userId03/Profile_picture_folder/image_03
..ect

None 您在此处使用 Firebase 的工作实际上是同步的,也不会阻塞主线程。 None 的 Firebase SDK 提供了阻止方法。每当您有一个 Task 对象时,该工作就会在另一个线程上完成。

此外,Glide 完全异步工作 - 它不会阻塞您用来调用它的线程。

您看到的任何延迟都是系统固有的。