奇怪的FileNotFoundException异常来自野生Android应用程序

奇怪的FileNotFoundException异常来自野生Android应用程序,android,Android,我正在开发一款Android应用程序,该应用程序目前正在生产中,我偶尔会看到类似以下内容的异常(通过airbrake报告): [1.0.4] java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.android/com.mycompany.android.activities.MainActivity}: android.view.InflateException: Binary XML

我正在开发一款Android应用程序,该应用程序目前正在生产中,我偶尔会看到类似以下内容的异常(通过airbrake报告):

[1.0.4] java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.android/com.mycompany.android.activities.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class <unknown>
... cut lots of stuff ...
### CAUSED BY ###: java.io.FileNotFoundException: res/drawable-hdpi/tab_active.9.png:
AssetManager.java:-2:in `android.content.res.AssetManager.openNonAssetNative'
AssetManager.java:406:in `android.content.res.AssetManager.openNonAsset'
Resources.java:1706:in `android.content.res.Resources.loadDrawable'
... cut lots more stuff ...
[1.0.4]java.lang.RuntimeException:无法启动活动组件信息{com.mycompany.android/com.mycompany.android.activities.MainActivity}:android.view.InflateException:二进制XML文件行#7:膨胀类时出错
... 剪很多东西。。。
###由####引起:java.io.FileNotFoundException:res/drawable hdpi/tab#u active.9.png:
java:-2:in`android.content.res.AssetManager.OpenNoAssetNative'
java:406:in`android.content.res.AssetManager.OpenNoAsset'
Resources.java:1706:in`android.content.res.Resources.loadDrawable'
... 切更多的东西。。。
在测试中,这个视图肯定在多个HDPI设备上工作,所以资源在那里很好。在构建最终的APK之前,我进行了全面的清理/重建,当然还将APK发送出去进行内部测试。事实上,每个版本有1-2个这样的异常,而不是10000个,这表明对于大多数用户来说,这个资源绝对是正确打包的


我完全被难住了,不确定为什么它不能在某些手机上加载。有人在他们的应用程序中看到过类似的东西吗?

我想,这些设备运行的是安卓1.5

从以下文件:

提供默认资源很重要,不仅因为 应用程序可能会在您没有预料到的配置上运行,但 这也是因为Android的新版本有时会添加配置 旧版本不支持的限定符。如果使用新版本 资源限定符,但保持与旧版本的代码兼容性 Android版本,当旧版本的Android运行 应用程序,如果不提供默认资源,它将崩溃, 因为它无法使用新限定符命名的资源。For 例如,如果您的minSdkVersion设置为4,并且您对所有 您的可提取资源使用夜间模式(夜间或非夜间,其中 则API级别4设备无法访问 您的可提取资源将崩溃。在这种情况下,你可能 希望notnight成为您的默认资源,所以您应该排除它 限定符,使您的可提取资源处于可提取/或 可抽出的夜/

由于您使用的是
-hdpi
-qualifier,这可能是个问题,因为Android 1.6(API级别4)中引入了这些限定符,因此在Android 1.5中不可用

请参见本主题:

因此,在
res/drawable
-文件夹中提供一些后备资源可能会解决您的问题


可能有一个基于我最初想法的Bug,如下所述:

可能会为下一个资源引发错误。因此,请确保为
res/drawable
-文件夹中的每个drawable提供备用方案


这是针对Android 1.5的,我不确定这在Android 2.3中是否仍然是一个问题,但不同的制造商处理这些事情的方式不同。

我从来没有找到这个问题的确切原因,但根据我开发相关应用的经验,我相信这是由于达到活动的内存限制造成的。在您的活动内存不足之后,似乎会发生各种奇怪的错误,包括这样的事情


当我对应用程序的内存管理进行其他改进时(特别是通过对位图使用
SoftReference
),这些类型的异常出现的频率开始降低。

可能没有帮助,但我有一个下载量>400k的应用程序,从未见过此错误。感谢您的提示。然而,这些设备运行的是Android 2.3,我们在drawable/目录中也有后备资源。