【发布时间】:2017-12-28 23:01:08
【问题描述】:
我已经在我的设备和几个模拟器上测试了该应用程序。该应用没有崩溃,我在 LogCat 上也看不到任何内容,但我可以在 22 小时内看到大约 400 次 ANR 和崩溃。
该错误没有说明缺少哪个资源来检查它以及如果它缺少为什么它没有在我的手机上崩溃?
这是导致崩溃的行:
int themeLayout = sharedPreferences.getInt(THEME_KEY, R.layout.input_1);
mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
themeLayout, null);
如果共享首选项返回 null,那么我分配了一个默认值来使用该值,但它仍然崩溃。我检查了布局,它存在,还要检查内容。
我创建了具有相同规格的模拟器,但它没有崩溃。
android.content.res.Resources$NotFoundException: 在 android.content.res.ResourcesImpl.getValue (ResourcesImpl.java:202)
在 android.content.res.Resources.loadXmlResourceParser (Resources.java:2968) 在 android.content.res.Resources.getLayout (Resources.java:1984) 在 android.view.LayoutInflater.inflate (LayoutInflater.java:425) 在 android.view.LayoutInflater.inflate (LayoutInflater.java:378) 在 com.sunzala.afghankeyboard.android.SoftKeyboard.onCreateInputView (SoftKeyboard.java:163) 在 com.sunzala.afghankeyboard.android.SoftKeyboard.onStartInput (SoftKeyboard.java:242) 在 android.inputmethodservice.InputMethodService.doStartInput (InputMethodService.java:2641) 在 android.inputmethodservice.InputMethodService$InputMethodImpl.startInput (InputMethodService.java:590) 在 android.inputmethodservice.IInputMethodWrapper.executeMessage (IInputMethodWrapper.java:186) 在 com.android.internal.os.HandlerCaller$MyHandler.handleMessage (HandlerCaller.java:37)
编辑: 我发现了这个错误:
E/dalvikvm: 找不到类 'android.graphics.drawable.RippleDrawable',引用自方法 android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
【问题讨论】:
-
我希望您的代码会因设置首选项的应用程序的某些更新而崩溃。资源 ID 可以在每次构建时更改。正如您所做的那样,它们不可以安全地坚持下去。这是否是导致此特定崩溃的原因,我不能说,但您需要重新编写此代码以使用 you 控制的某些值作为首选项值,而不是资源 ID。
-
@CommonsWare 当应用程序第一次运行时,我用这一行
editor.putInt(THEME_KEY, R.layout.input_8).apply();存储价值。该值不是静态存储的。你觉得还重要吗?谢谢 -
您引用为
R.layout.input_8的实际int值可能因构建而异。您今天保存在SharedPreferences中的值可能会在用户升级到您的应用程序的较新版本后的一周内失效。不要保留R值,因为它们在构建之间不是恒定的。