You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:Java设置ImageView图片时应用崩溃问题排查

Android应用启动崩溃问题解析与解决

嘿,很高兴你已经搞定这个问题啦!我来帮你拆解下为什么drawable-v24目录会导致崩溃,以及以后怎么避开这类坑:

问题根源

你遇到的崩溃本质是资源找不到异常(Resources$NotFoundException),核心原因在于:

  • drawable-v24是Android的版本限定资源目录,只有当设备运行的Android系统API等级≥24(Android 7.0)时,系统才会加载这个目录下的资源。
  • 如果你的测试设备/模拟器API等级低于24,系统找不到R.drawable.imageNameInDrawableFile对应的资源,就会直接抛出异常导致应用崩溃。
  • 而普通的drawable目录是通用资源目录,兼容所有API等级的设备,所以把图片移到这里后,所有设备都能正常读取资源,应用就恢复正常了。

额外的优化建议

  1. 调整视图初始化时机:你的Java代码里把findViewById和setImageResource放在onStart里没问题,但通常我们会把这类视图初始化操作放在onCreate方法中——因为onCreate是Activity创建时的核心初始化阶段,代码逻辑更集中:
public class MainActivity extends AppCompatActivity { 
    public ImageView images; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        // 把初始化逻辑移到这里更规范
        images = findViewById(R.id.imageView000); 
        images.setImageResource(R.drawable.imageNameInDrawableFile);
    } 
}
  1. 版本限定资源的正确用法:如果你确实需要为高版本设备提供专属资源(比如适配API 24+的矢量图特性),记得在普通drawable目录下放一份低版本兼容的资源,或者在build.gradle(Module level)中配置矢量图兼容支持:
android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

同时确保依赖了AppCompat库:

implementation 'androidx.appcompat:appcompat:1.6.1'

这样既能利用高版本特性,又不会让低版本设备崩溃。

内容的提问来源于stack exchange,提问作者Datis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:43:16