更改字体样式后,Android 应用程序在三星设备上崩溃

Posted

技术标签:

【中文标题】更改字体样式后,Android 应用程序在三星设备上崩溃【英文标题】:Android app crashed on Samsung devices after change of font style 【发布时间】:2015-10-22 17:00:42 【问题描述】:

当我尝试更改设备的字体(Samsung Galaxy Tab3)时,我遇到了一个应用程序问题,即我的应用程序崩溃了。在这种情况下,当我更改字体时,应用程序正在后台运行。

步骤:

启动应用程序 使用状态栏打开设备设置 更改设备的字体样式 使用最近的应用返回应用 崩溃

我尝试在其他设备上测试此场景,但无法重现。我的应用程序仅在三星设备上崩溃,并且仅在系统字体样式更改时崩溃。

附上崩溃日志:

07-22 12:26:09.359: E/androidRuntime(8110): FATAL EXCEPTION: main
07-22 12:26:09.359: E/AndroidRuntime(8110): java.lang.NullPointerException
07-22 12:26:09.359: E/AndroidRuntime(8110):     at com.acs.nomad.app.widget.h.a(Unknown Source)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at com.acs.nomad.app.b.ap.m(Unknown Source)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at com.acs.nomad.app.d.v.onPause(Unknown Source)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1129)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:662)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1450)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl$2.run(FragmentManager.java:444)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1401)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.os.Handler.handleCallback(Handler.java:615)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.os.Looper.loop(Looper.java:137)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at android.app.ActivityThread.main(ActivityThread.java:4949)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at java.lang.reflect.Method.invokeNative(Native Method)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at java.lang.reflect.Method.invoke(Method.java:511)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
07-22 12:26:09.359: E/AndroidRuntime(8110):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

您首先需要解码堆栈跟踪。见Decoding Obfuscated Stack Traces。我也看不到你的行号。在您的下一个版本中,还在您的 proGuard 中添加以下行:-renamesourcefileattribute SourceFile & -keepattributes SourceFile,LineNumberTable。现在它将在您的崩溃日志中显示行号(而不是 Unknown Source)。 我也遇到了同样的问题,你找到解决方法了吗? 【参考方案1】:

Stock Android 没有change device's font style

它一定是三星 TouchWiz 的东西。可能是,您应该查看三星特定的 SDK。

但如果我是你,我会通过广播接收器监听字体样式的变化。使用 Google Play 中的 Broadcast Monitor 应用找出要收听的广播。

然后,我会吞下空指针异常,并在发生这种情况时重新启动 Activity。我意识到这是一个激烈的动作,但在你找出字体样式是如何导致 nullpointer 异常之前,这可能是唯一的解决方法。

【讨论】:

Stock Android 没有更改设备的字体样式,在三星 tab3 有 Display --> Font --> FontStyle。 您在更正我使用的菜单名称吗?或者你是说三星 tab3 确实在运行没有 TouchWiz 的普通 Android 操作系统?

以上是关于更改字体样式后,Android 应用程序在三星设备上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

AppCompatActivity的按钮文本的字体样式已更改

保存图像后由于方向更改导致 Android 显示图像捕获错误

安装 zsh 并更改字体样式后,我在 VSCode 中的终端字体很小?

FontFamily React Native App 用设备自定义字体覆盖(三星和 Oppo)

更改 TextBox 中的字体样式

如何更改Android Studio的代码字体和颜色