Android Studio中BitmapFactory.decodeResource返回null致应用崩溃求助
解决BitmapFactory.decodeResource返回null的问题
排查方向1:图片格式与资源目录问题
- 确认图片为标准PNG格式:用系统预览工具打开bg.png,检查是否损坏或采用了Android不兼容的特殊压缩格式。可重新导出PNG,选择无压缩或标准压缩模式。
- 调整资源目录:若图片是指定mdpi密度的,应放入
res/drawable-mdpi文件夹,而非根目录的drawable。移动后重新编译项目。
排查方向2:内存加载限制优化
1024×512 px的图片虽不算大,但可通过BitmapFactory.Options调整加载参数,避免因内存或硬件兼容性问题导致加载失败:
public BitmapBank(Resources res ) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; // 无透明需求时用此格式减少内存占用 options.inSampleSize = 1; // 可根据需求设为2,将图片尺寸缩小一半加载 options.inDither = true; background = BitmapFactory.decodeResource(res, R.drawable.bg, options); // 增加非空判断,避免直接调用getWidth/Height崩溃 if (background == null) { throw new IllegalArgumentException("无法加载bg.png资源"); } }
排查方向3:Android Studio缓存与编译问题
- 清理项目缓存:点击菜单栏
File > Invalidate Caches...,选择Invalidate and Restart,重启后重新编译。 - 检查build.gradle配置:确认
android > defaultConfig中vectorDrawables.useSupportLibrary的开启未干扰位图加载,同时保证compileSdk、targetSdk版本与图片格式兼容。
排查方向4:资源ID混淆问题
若开启了R8/ProGuard资源混淆,需在proguard-rules.pro中添加规则避免bg.png的资源ID被混淆:
-keep class 你的项目包名.R$drawable { public static <fields>; }
替换上述代码中的你的项目包名为实际包名。
内容的提问来源于stack exchange,提问作者Dean-O
相关产品推荐
相关产品推荐

