java.lang.outofmemoryerror android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

Ahm*_*lan 6 java android exception bitmap out-of-memory

在设置内容视图时,我遇到了这个异常.我已经尝试通过以下方式处理此异常:

try{
     setContentView(R.layout.activity_main);

}catch (OutOfMemoryError e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

在测试时,这个例外在100次约为5次.但我无法解决这个问题.或者我的QA团队将在此杀死我:(

Jim*_*Jim 11

有几种方法可以解决此类错误.通常是因为您的图像分辨率在布局上太高.以下是您的选择:

  1. 要求较低分辨率的图像(较少的像素).这可能是不可接受的,但你的团队应该意识到内存限制.

  2. 从布局中删除图像,但保留ImageView元素(如果有).如果是背景,请删除背景.然后使用java有效地加载图像.在加载之前,您需要测量想要图像的元素的屏幕尺寸和/或尺寸.Android文档在这里有一个很好的例子:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

  1. 增加应用程序的"heapSize".这是一个最后的度假村!否则,您将来可能会遇到同样的错误,然后必须使用上述方法之一来解决它...而且您的QA真的不会喜欢你!以下是对以下内容的参考heapSize:

如何增加Android应用程序的堆大小?

您也可能在另一个屏幕上引用图像或者有内存泄漏,在这种情况下,您需要查看在此之前调用的任何/所有代码(包括其他活动)以查找这些泄漏的位置.可能的原因是诸如传递Activity给后台线程或服务而不是仅传递它的Context,创建对图像的静态引用,不WeakReference用于处理传递给其他线程/进程的大型内存对象,或其他不寻常的引用对象的方法.