Загрузка изображений из Firebase Storage Faster - PullRequest
0 голосов
/ 06 октября 2018

Текущая структура архитектуры моего хранилища Firebase выглядит следующим образом:

Photos_folder /
-> идентификатор пользователя 01 -> profile_picture_folder / -> image / jpeg (URI)
-> идентификатор пользователя 02
-> идентификатор пользователя 03
-> ect ...

В моем адаптере у меня есть метод onBindViewHolder, в котором я передаю свой URI и извлекаю образ URI через сеть хранения Firebase:

@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 выполняет работу в основном потоке, и он синхронный, поэтому приложение ожидает между каждым получением изображения.

1025 * Есть в любом случае достичь извлечения изображения из Firebase быстрее

Может быть, как установить соединение с Firebase на более высоком эталонном уровне, , например:
gs: //appname-b4532.appspot.com/Photos/

После открытия соединения переходите по идентификаторам пользователей и извлекаете их соответствующие изображения при переходе по подпутьу?

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

1 Ответ

0 голосов
/ 06 октября 2018

Никакая ваша работа с Firebase здесь не является синхронной и не блокирует основной поток.Ни один из Firebase SDK не предоставляет методы блокировки.Всякий раз, когда у вас есть объект Task, эта работа выполняется в другом потоке.

Кроме того, Glide работает полностью асинхронно - он не блокирует поток, который вы использовали для его вызова.

Любые задержкивы видите, просто присущи системе.

...