0

即使在我的应用程序中消除了所有位图后,它们仍然出现在内存分析器中。(见下面的屏幕截图)请你帮我理解为什么它们仍然被列出并帮助我最终删除它们吗?我确定没有位图,因为我还删除了位图导入。 在此处输入图像描述

代替创建位图,我现在从 Uri 创建图像,如下面的代码所示。这种方法会生成位图吗?

try {
    InputStream inputStream = getContentResolver().openInputStream(imageURI);
    imageDrawable = Drawable.createFromStream(inputStream, imageURI.toString() );
} catch (FileNotFoundException e) {
    imageDrawable = getResources().getDrawable(R.drawable.default_image);
}

仅供参考,我消除位图的原因是因为它们似乎导致内存不足崩溃。即使在仔细遵循关于如何减小位图大小(inSampleSize、bitmap.recycle() 等)的 SO 指导之后,应用程序也会在每次启动时因 OOM 而崩溃。我很生气,决定消除位图。但是,就像不会搬出去的孩子一样,他们似乎仍然在缠着我。

4

1 回答 1

0

虽然通常对应用程序不可见,但 Drawable 可能采用多种形式:

位图:最简单的 Drawable,PNG 或 JPEG 图像。

九个补丁:PNG格式的扩展允许它指定有关如何拉伸它并在其中放置东西的信息。

形状:包含简单的绘图命令而不是原始位图,在某些情况下可以更好地调整大小。

图层:一个复合可绘制对象,它在彼此之上绘制多个底层可绘制对象。状态:一个复合可绘制对象,它根据其状态选择一组可绘制对象中的一个。

级别:一个复合可绘制对象,它根据其级别选择一组可绘制对象中的一个。

Scale:具有单个子drawable的复合drawable,其整体大小根据当前级别进行修改。

这是来自 Drawable 的描述。所以我相信Drawable里面只是为你创建位图

于 2013-09-02T06:11:19.603 回答