加载位图会导致我的应用中的outOfMemory

时间:2018-01-29 09:40:15

标签: android memory bitmap

我在Android应用程序中遇到内存泄漏问题。我读过米利恩的文章,但记忆仍然在泄漏并最终结束。更详细:我有3个活动,其中包含图像视图的网格。所有图像视图都包含文件中的位图。当然我加载小尺寸的位图(使用options.inSampleSize)。另外我使用kind o cache(带有静态映射的类包含位图及其文件名,以避免需要多次从文件加载相同的位图):

 public class PhotoCache {
    private static Map<String, Bitmap> photos = new HashMap<String, Bitmap>();
    public static void addPhoto(String key, Bitmap val) {
        photos.put(key, val);
    }

    public static Bitmap getPhoto(String key) {
        return photos.get(key);
    }

    public static boolean containsPhoto(String key) {
        return photos.containsKey(key);
    }
 }

不幸的是,当我从一个活动移动到另一个活动并从设备加载更多位图时,内存使用增长非常快,并且在大约30个步骤(从一个活动移动到另一个活动)之后,出现了outOfMemory异常。

- &GT;我认为我能做的最好的事情是在我的活动和片段的onPause方法中回收位图,但是当我点击后退按钮时应用程序崩溃,因为早期活动使用的位图被回收。我正在寻找一些解决方案。也许我应该在onResume方法中加载位图?或阻止点击后退按钮超过x(3-5)次? [我不想使用一些现成的位图解决方案和框架,如Glide或类似的。]

0 个答案:

没有答案