即使消除了我的应用程序中的所有位图,它们仍然出现在内存分析器中。 (请参阅下面的屏幕截图)请您帮助我理解为什么它们仍然列出并帮助我最终删除它们?我确定没有位图,因为我也删除了Bitmap导入。
代替创建位图,我现在从Uri创建图像,如下面的代码所示。这种方法是否会生成位图?
try {
InputStream inputStream = getContentResolver().openInputStream(imageURI);
imageDrawable = Drawable.createFromStream(inputStream, imageURI.toString() );
} catch (FileNotFoundException e) {
imageDrawable = getResources().getDrawable(R.drawable.default_image);
}
仅供参考,我消除位图的原因是因为它们似乎导致内存崩溃。即使在仔细遵循SO指导如何减少位图大小(inSampleSize,bitmap.recycle()等)之后,应用程序也会在每次启动时与OOM一起崩溃。我生气了,决定消除位图。但是,就像那些不会搬出去的孩子一样,他们似乎仍然困扰着我。
答案 0 :(得分:0)
虽然应用程序通常看不到,但Drawables可能需要一个 各种形式:
位图:最简单的Drawable,PNG或JPEG图像。
Nine Patch:PNG格式的扩展允许它指定 有关如何拉伸它并将其放置在其中的信息。
Shape:包含简单的绘图命令而不是原始位图, 允许它在某些情况下更好地调整大小。
图层:复合绘图,在每个图层的顶部绘制多个底层绘图 其他。状态:复合drawable,选择一组中的一个 基于其状态的drawables。
级别:选择的复合drawable 基于其级别的一组drawable中的一个。
缩放:具有单个子drawable的复合drawable,其整体大小已修改 根据目前的水平。
这来自Drawable描述。所以我相信Drawable内部只是为你创建位图