有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android Studio Firebase图像导致OOM

目前,我正在开发一个简单的社交媒体应用程序,我有一些问题。如果不是内存不足,我的应用程序可以完美运行。我已经通过logcat了解了为什么我会收到这条消息,以及为什么我的应用程序在经过一些测试后没有显示图像

我在我的应用程序上运行了Android Profiler来查看发生了什么,然后我开始切换活动,发帖子并加载以前的一些帖子。我注意到我的内存在稳步增长,在大约500mb时,我的应用程序停止显示图像

我的记忆力并没有下降,每次我加载一张图片,它都会显著增加。我使用片段在加载用户帖子的提要中导航,我还有一个设置按钮,可以将用户带到一个新的设置活动。如果内存达到500mb左右,则不会加载每个片段和设置中的所有图像

我正在使用Firebase存储来获取图像。我使用Firebase来获取用户名、电子邮件等的文本,它似乎可以完美加载

有人知道如何解决这个问题吗?它只需要大约一分钟的活动就可以达到500mb

下面是我在设置活动中加载图像的方式,在我获取post feed的活动中,它使用模块类,所以我不会在这里粘贴所有代码,我已经对其进行了测试。两个活动上的图像总是以相同的方式加载。总之,这是我的设置活动,用于获取配置文件图像

     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);
}

谁能告诉我怎么解决这个问题吗。图像压缩?垃圾收集?我需要一些建议,谢谢


共 (1) 个答案

  1. # 1 楼答案

    处理完图像后,可能需要显式调用image.dispose()。这是因为图像不会加载到java内存堆中,因此不会被垃圾收集