在设置内容视图时,我遇到了这个异常.
我已经尝试通过以下方式处理此异常:
我已经尝试通过以下方式处理此异常:
try{ setContentView(R.layout.activity_main); }catch (OutOfMemoryError e) { e.printStackTrace(); }
在测试时,这个例外在100次约为5次.但我无法解决这个问题.或者我的QA团队将在此杀死我:(
解决方法
有几种方法可以解决此类错误.通常是因为您的图像分辨率在布局上太高.以下是您的选择:
>要求分辨率较低的图像(较少的像素).这可能是不可接受的,但你的团队应该意识到内存限制.
>从布局中删除图像,但保留ImageView元素(如果有).如果是背景,请删除背景.然后使用java有效地加载图像.在加载之前,您需要测量想要图像的元素的屏幕尺寸和/或尺寸. Android文档在这里有一个很好的例子:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
>增加应用程序的“heapSize”.这是一个最后的度假村!否则,您将来可能会遇到同样的错误,然后必须使用上述方法之一来解决它…而且您的QA真的不会喜欢你!这是关于heapSize的参考:
How to increase heap size of an android application?
您也可能在另一个屏幕上引用图像或者有内存泄漏,在这种情况下,您需要查看在此之前调用的任何/所有代码(包括其他活动)以查找这些泄漏的位置.可能的原因是将Activity传递给后台线程或服务而不是仅传递它的Context,创建对图像的静态引用,不使用WeakReference来处理传递给其他线程/进程的大型内存对象,或者引用对象的其他异常方法.