在我的最新版本中,我突然开始得到这个错误:Resources$NotFoundException: Resource ID #0x7f080120
.资源ID是我的通知图标,它用在ViewPager的一个选项卡中,在启动时显示。我自己无法重现这个问题,但在Firebase Crashlytics中看到了很多新的崩溃。
通知图标以多种密度存储:
导致崩溃的代码:ContextCompat.getDrawable(context, R.drawable.ic_notification_icon)
奇怪的是,我没有改变任何与这个可绘制对象相关的东西,也没有改变这个版本中ViewPager的代码。我在四处搜索中找到的最好的建议是清理并重建这个项目。我这样做了,并上传了一个新版本,但崩溃再次出现。
在以下Android版本上观察到崩溃:
- 安卓13
- 安卓11
- 安卓8.1.0
- 安卓7.1.2
和以下设备:
- 银河A53 5G
- Nexus 5X手机
- 标准PC(i440FX + PIIX,1996年)
- 体内S1
- 一加8专业版
- 米九
- 编辑:**我可以看到44%的受影响设备是root的。这是否意味着我不应该担心这个问题?
2条答案
按热度按时间col17t5w1#
我们在应用程序中也经常遇到这种错误。所以,通过做一点点搜索,我正在将ContextCompat更改为AppCompatResources以获取可绘制对象。我现在真的不知道这对我们的应用是否有益,但更改的原因很简单,因为ContextCompat返回结果的方式与AppCompatResources返回结果的方式有关。ContextCompat只是调用上下文'的getDrawable方法,该方法依次调用Resource's getDrawable方法,Resource's getDrawable方法依次调用ResourceImpl getValueForDensity方法,最后调用本机方法。而AppCompatResources调用AppCompatDrawableManager的getDrawable方法,该方法尝试不同的方法来获取可绘制对象,如果这些方法都不起作用,则最终回退到ContextCompat。这似乎是我获取可绘制对象的更好候选方法。
AppCompatDrawableManager的getDrawable方法
这个answer也有有用的信息。
3htmauhk2#
ContextCompat正在制造问题
直接使用
getDrawable(上下文,R.可绘制.ic_通知_图标)