由于无限循环,Android Jetpack AppCompatTextView.setTypeface StackOverFlowError

Fur*_*kul 6 android android-jetpack

我们已经收到一些有关此情况的崩溃信息:当我们android:textStyle在AppCompatTextView中使用具有任何值(粗体,斜体或两者兼有)的属性,或者android:fontFamily在Android 4.2.2版本上为其设置值时,其自身就会循环并最终导致StackOverFlowError

这是我们如何使用视图的示例。

<androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/welcome_app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="3"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#fff"
        android:textSize="26sp"
        android:textStyle="bold" />
Run Code Online (Sandbox Code Playgroud)

这是例外之一:

Caused by java.lang.StackOverflowError
       at java.lang.Class.getDeclaredField(Class.java)
       at java.lang.Class.getDeclaredField(Class.java:629)
       at androidx.core.graphics.TypefaceCompatBaseImpl.getUniqueKey(TypefaceCompatBaseImpl.java:85)
       at androidx.core.graphics.TypefaceCompatBaseImpl.getFontFamily(TypefaceCompatBaseImpl.java:210)
       at androidx.core.graphics.TypefaceCompat.getBestFontFromFamily(TypefaceCompat.java:169)
       at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:196)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:702)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)
       at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:705)
       at android.widget.TextView.setTypeface(TextView.java:1581)

// it goes on like this forever until it reaches to Activity.setContentView()
Run Code Online (Sandbox Code Playgroud)

甚至可能在某些特定设备上,因为我们无法在本地重现此问题。除了删除文本样式外,还可以解决该问题?任何帮助表示赞赏,谢谢。