Android Firebase存储映像使用太多数据

Android Firebase存储映像使用太多数据,android,firebase,firebase-storage,android-gridview,Android,Firebase,Firebase Storage,Android Gridview,我正在开发一个应用程序,使用firebase在网格视图中显示图像,并提供相关信息 我注意到它使用了大量的数据。我打开了“显示当前数据输入和输出”以在我的通知中显示。即使图像已加载,它仍在使用数据 [下午5:13的数据使用情况] [下午5:14的数据使用情况] [下午5:16的数据使用情况] [下午5:20的数据使用情况] [图像已加载并仍在使用数据…] [存储器中的图像和大小] 我有一个活动,它读取我的数据库,在那里我循环遍历数据库,然后用get和set将数据解析为一个对象类 found_a

我正在开发一个应用程序,使用firebase在网格视图中显示图像,并提供相关信息

我注意到它使用了大量的数据。我打开了“显示当前数据输入和输出”以在我的通知中显示。即使图像已加载,它仍在使用数据

[下午5:13的数据使用情况]

[下午5:14的数据使用情况]

[下午5:16的数据使用情况]

[下午5:20的数据使用情况]

[图像已加载并仍在使用数据…]

[存储器中的图像和大小]

我有一个活动,它读取我的数据库,在那里我循环遍历数据库,然后用get和set将数据解析为一个对象类

 found_animal animal = new found_animal(imgUrl
             ,animalBreed 
             ,animalCoat 
             ,animalColour 
             ,animalEarType 
             ,animalGender 
             ,animalIDTag, 
             animalSize, 
             animalTail, 
             animalType, 
             latitude, 
             longitude, 
             name, 
             number,Date); 
然后我有一个类,它使用数组适配器扩展这个类

public class found_animal_array extends ArrayAdapter<found_animal> 
找到公共类\u animal\u数组扩展了ArrayAdapter
我使用此代码下载图像

    found_animal card = getItem(position);
    viewHolder.imgUrl= card.getImgUrl();
String ref = "myref" + viewHolder.imgUrl;
        storageRef.child(ref).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
            @Override
            public void onSuccess(byte[] bytes) {

                final  Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,bytes.length);
            viewHolder.im.post(new Runnable() { //im is a imageview
                @Override
                public void run() {

                    viewHolder.im.setImageBitmap(bitmap);
                }
            }) ;


        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            Log.i("something went wrong", exception.getMessage());
        }
    });
found\u动物卡=getItem(位置);
viewHolder.imgUrl=card.getImgUrl();
String ref=“myref”+viewHolder.imgUrl;
storageRef.child(ref).getBytes(Long.MAX_值).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(字节[]字节){
最终位图位图=位图工厂.decodeByteArray(字节,0,字节.长度);
viewHolder.im.post(新Runnable(){//im是一个imageview
@凌驾
公开募捐{
viewHolder.im.setImageBitmap(位图);
}
}) ;
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
Log.i(“出错了”,exception.getMessage());
}
});

我刚刚重新运行了该活动,并注意到当gridview上的scrollview被移动时,它会使用数据。。喜欢重新下载图像。

使用一些识别逻辑将图像的URL保存在数据库中,然后使用Glide库从URL加载图像。它将负责内存和缓存图像。

当您滚动时,将调用适配器的getView。如果你把下载代码放在getitem或getview中,那么它会在每个卷轴上运行。那么我应该把下载代码放在哪里呢?它当前在getView中@Birendrasing下载后即可保存图像。然后在下载之前,您可以检查设备上是否存在图像文件。仅当设备上不存在映像时才下载映像。为什么选择向下投票?我使用这种技术,而且效果很好。