我遇到了严重的内存问题,我期待着回收位图。
然而,我的应用程序正在做什么,正在建立一个带有几个位图的画廊(是的,已弃用),然后是几个画廊。
所以在一天结束时,应用程序看起来像(LinearLayout样式):
*一些网页浏览量 *一个有7张图片的图库。 *一些网页浏览量 *包含10张图片的图库
等等。
所以我在想的是......一旦我显示了这些图像,并且它们在屏幕上,这些位图是否可以回收?
有没有办法回收整个图库组件?
非常感谢你。
编辑:
我已经尝试了很多东西。我仍然收到错误java.lang.IllegalArgumentException: bitmap size exceeds 32bits
这是我的实际代码:
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inDither=false; //Disable Dithering mode
bfOptions.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
bfOptions.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
bfOptions.inTempStorage=new byte[32 * 1024];
bfOptions.inInputShareable=true;
bfOptions.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeFile(mUrls.get(position).getPath(), bfOptions);
inflatedImageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 120, 120, false));
正如您所看到的,我为Bitmap设置了许多选项,并调整了它的大小,并降低了它的质量。仍然会出现同样的问题。
答案 0 :(得分:1)
首先,您不应该手动调用system.gc,通常也不需要手动回收位图。让操作系统尽其所能,决定何时采取巨大的命中来运行垃圾收集。
图库被弃用的原因之一是我相当确定它只是在呈现时加载所有项目。并且不会像列表视图一样加载它们并按需回收它们。这意味着它是一个巨大的RAM浪费,没有多少回收可以帮助你。此外,Gallery在4.0+手机上非常小巧,这是此时Android用户群的主要部分。我强烈建议你不要使用画廊。
有两种选择。
1)查看现在内置于Support V4库中的寻呼机
2)HorizontalListView - > https://github.com/MeetMe/Android-HorizontalListView
另外,请确保在将所有图像加载到图像视图中之前对其进行下采样。要了解如何阅读http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
答案 1 :(得分:1)
确定。我解决了我遇到的问题;我有一个带有图库组件和webview的linearLayout。如果我没有渲染webview,那么应用程序就不会崩溃。
因此经过一些调整后,它可以正常工作而不会崩溃:
wv_detail.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
wv_detail.setLayerType(View.LAYER_TYPE_NONE, null);