
当android应用在启动splashactivity时,如果其背景或内部引用的drawable资源未能正确加载,则可能抛出java.lang.runtimeexception,并伴随android.content.res.resources$notfoundexception。典型的错误日志如下所示:
Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.packageName/com.packageName.SplashActivity}:
android.content.res.Resources$NotFoundException: Drawable
com.packageName:drawable/splash_background with resource ID #0x7f07015d
... (堆栈信息) ...
Caused by android.content.res.Resources$NotFoundException Drawable (missing name) with resource ID #0x7f07015e从上述日志中,我们可以清晰地看到:
根据问题描述,SplashActivity的SplashTheme样式中,android:windowBackground属性引用了@drawable/splash_background:
<style name="SplashTheme" parent="@style/Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/splash_background</item> <!-- Resource ID #0x7f07015d -->
</style>而splash_background.xml是一个layer-list,它又引用了另外两个Drawable:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@drawable/gradient_splash" /> <!-- Resource ID #0x7f0700af -->
<item android:drawable="@drawable/splash_icon" android:gravity="center" /> <!-- Resource ID #0x7f07015e -->
</layer-list>这意味着,当系统尝试加载splash_background时,如果其内部引用的gradient_splash或splash_icon有任何一个找不到,都会导致链式反应,最终表现为splash_background加载失败。日志中明确指出#0x7f07015e对应的Drawable(即splash_icon)也未找到,这进一步证实了资源缺失或配置不当。
Resources$NotFoundException通常发生在以下几种情况:
在本案例中,问题描述提到splash_icon.png存在于drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi、drawable-xxxhdpi等文件夹中,但仍然出现NotFoundException,这强烈指向了多密度资源管理不当或构建系统在特定设备上查找资源时出现偏差。即使资源文件存在,也可能因为某个特定设备密度下缺少对应的最优匹配,或者在查找过程中出现意外错误。
针对此类Resources$NotFoundException,以下是详细的解决方案和建议:
确保所有图像资源在各种屏幕密度下都有适当的变体是解决此问题的关键。
android {
defaultConfig {
// ...
vectorDrawables.useSupportLibrary = true
}
}手动创建和管理所有密度的图片可能繁琐且容易出错。
虽然build.gradle中的大部分配置与此错误不直接相关,但以下几点值得检查:
在进行上述代码和配置检查后,尝试以下通用排查步骤:
Resources$NotFoundException是Android开发中常见的资源管理问题,尤其是在涉及多密度Drawable时。解决此类问题的关键在于理解Android资源查找机制,并确保为所有目标设备提供完整、正确的资源。通过采用矢量图、合理管理多密度位图、利用辅助工具以及执行彻底的排查,可以有效避免此类崩溃,提升应用的稳定性和用户体验。
以上就是Android启动屏Drawable资源未找到异常的诊断与解决的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号