Android Studio Firebase图片会导致OOM

时间:2018-05-07 20:04:43

标签: java android performance firebase android-studio

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

我在我的应用上运行了Android Profiler,看看发生了什么,我开始转换活动,发帖并加载一些以前的帖子。我注意到我的记忆力正在稳步增加,大约500mb我的应用程序停止显示图像。

我的记忆力并没有减少,每次加载图像时它都会显着增加。我正在使用片段来浏览加载用户帖子的Feed,我还有一个设置按钮,可以让用户进行新的设置活动。如果内存达到500mb左右,则每个片段和设置中的所有图像都将无法加载。

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

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

以下是我在设置活动中加载图片的方法。在我获得帖子Feed的活动中,它使用模块类,所以我不会在这里粘贴所有代码,我已经测试过了。两个活动上的图像将始终以相同的方式加载。无论如何这里是我获取profileimage的设置活动,

     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 个答案:

答案 0 :(得分:0)

完成图片后,您可能需要明确调用image.dispose()。这是因为图像没有加载到java内存堆中,因此不会被垃圾回收。