Firebase 图像加载缓慢

Firebase Slow Image Loading

我目前有点挣扎。我编写一个基本的社交媒体应用程序已经有一段时间了,而且图像加载速度很慢。我正在使用 picasso 从我的 firebase 存储中加载图像,它非常慢。

当应用程序启动时,我加载到 recyclerview 中的帖子仅在我滚动它们时加载,但它们加载速度相对较快。当我做更多的事情、切换活动等时,我的图像加载速度会越来越慢,直到它们无法加载,我只能使用占位符图像。

不仅是 recyclerviews,因为我有一个设置 activity 来显示用户的凭据,而且我得到了同样缓慢的加载图像。这是一些代码。

  UserRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild("username")){
                String Username =  dataSnapshot.child("username").getValue().toString();
                username.setText(Username);
            }
            if (dataSnapshot.hasChild("profileimage")){
                String image = dataSnapshot.child("profileimage").getValue().toString();
                Picasso.get().load(image).placeholder(R.drawable.user_circle2).into(profileImage);
            }
        }

无论用户在应用程序上有多少activity,文本都会立即加载,但图像加载速度会持续变慢。

请有人帮忙,或建议快速显示图像的替代方法,谢谢。

编辑: 感谢 Doug Stevenson 告诉我移除监听器,我会这样做吗?

  eventListener = UserRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild("username")){
                String Username =  dataSnapshot.child("username").getValue().toString();
                username.setText(Username);
            }
            if (dataSnapshot.hasChild("profileimage")){
                String image = dataSnapshot.child("profileimage").getValue().toString();
                Picasso.get().load(image).placeholder(R.drawable.user_circle2).into(profileImage);
                endListener();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    }

private void endListener() {
    UserRef.removeEventListener(eventListener);
}

更新: 我已将删除侦听器添加到应用程序。 我在我的 phone 上调试这个,当然我得到了之前提到的慢速图像,不过我在模拟器上试过了,图像加载的速度保持不变,我可以切换活动,甚至在之后我做了很多事情,当我切换回我的帖子时,图像都加载正常。有什么想法吗???

我现在也在 logcat 中收到以下消息:

开始阻塞 GC 分配 05-07 19:28:20.493 15034-16164/com.sender.hp.sender I/art:分配并发标记清除 GC 释放了 3(72B) 个 AllocSpace 对象,0(0B) 个 LOS 对象,3% 空闲,494MB /510MB,暂停 384us 共 32.059ms 05-07 19:28:20.493 15034-16164/com.sender.hp.sender W/art:抛出 OutOfMemoryError "Failed to allocate a 48771084 byte allocation with 16777216 free bytes and 17MB until OOM"

我现在认为我的图像正在占用内存,导致图像显示缓慢,并解释了为什么文本仍然可以轻松显示而图像却不能。在将图像添加到 firebase 之前,我将尝试压缩图像。

虽然无法根据此处的信息确切知道是什么导致速度缓慢,但几乎可以肯定的是,添加事件侦听器而不在不再需要时删除它们会随着时间的推移导致问题。

如果您不删除不再需要的侦听器,它将继续接收在其侦听位置发生的更改。在您的情况下,这也意味着 Picasso 将继续加载图像。每次你像这样添加一个监听器而不删除它时,所有先前的监听器都将仍然接收结果并加载图像。我只能想象,重复这么多次会很快消耗具有移动数据连接的设备上的可用网络带宽。

始终确保删除不再需要的侦听器。