安卓应用启动崩溃,setContentView加载RelativeLayout布局报错咨询
报错具体原因
本次崩溃的根本触发原因是内存溢出(OutOfMemoryError),完整异常逻辑链如下:
- 堆栈最底层明确抛出
java.lang.OutOfMemoryError: Failed to allocate a 386564108 byte allocation with 4182480 free bytes and 126MB until OOM,说明系统需要分配约368MB的内存空间加载资源,但当前应用剩余可用内存仅126MB,不足以支撑分配请求,直接触发崩溃。 - 结合布局文件和堆栈调用链可定位到:占用过高内存的资源是
RelativeLayout节点设置的背景图@drawable/bk99,系统解析渲染布局时需要将该背景图解码为Bitmap,这张图片的分辨率/体积过大,解码后占用内存远超当前应用可用内存阈值。 - 上层抛出的
InflateException、反射调用异常均为内存溢出带来的连锁异常:背景图加载失败导致RelativeLayout实例化失败,进而导致布局文件整体解析失败,最终在setContentView(R.layout.activity_main)执行时触发崩溃。
该问题的常见触发场景
bk99图片本身分辨率过高,未做对应dpi适配就直接放在了默认drawable文件夹下,在低dpi设备上解码时会被系统自动拉伸,进一步放大内存占用。- 图片解压后像素数极高:ARGB_8888格式的图片内存占用计算公式为
宽度像素数 * 高度像素数 * 4字节,368MB的占用对应图片分辨率约为9600*9600像素,远超过普通手机屏幕的渲染需求。
内容的提问来源于stack exchange,提问作者Bint E Hawa
相关产品推荐
相关产品推荐

