首页 > 解决方案 > Android:IllegalStateException:无法在 MessageQueue.nativePollOnce(MessageQueue.java)上创建层

问题描述

多年来,我一直为这个错误烦恼。

Fatal Exception: java.lang.IllegalStateException: Unable to create layer for MatchCard_
   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:143)
   at android.os.Looper.loop(Looper.java:130)
   at android.app.ActivityThread.main(ActivityThread.java:5942)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

这种观点并不总是如此,但最常见的是。视图是这样构建的

<?xml version="1.0" encoding="utf-8"?>
<com.soudfa.views.RoundedView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="@integer/match_card_height"
android:layout_gravity="@integer/match_card_card_gravity"
android:transitionGroup="true"
android:layoutDirection="locale"
app:cardPreventCornerOverlap="@bool/match_card_prevent_corner_overlap"
app:corner_radius="@dimen/corner_radius"
app:cardElevation="0dp">

<com.soudfa.fragments.match.views.CustomRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="@integer/match_card_height"
    android:layout_gravity="@integer/match_card_card_gravity"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:clipToPadding="false"
    android:scrollbars="@integer/match_card_scroll_bar"
    android:background="@color/brightest"
    android:overScrollMode="never"/>

<FrameLayout
    android:id="@+id/leftActionImageContainer"
    android:layout_width="@dimen/match_card_decision_icon_size_start"
    android:layout_height="@dimen/match_card_decision_icon_size_start"
    android:layout_centerVertical="true"
    android:layout_alignParentStart="true"
    android:alpha="0"
    android:background="@drawable/shape_match_decision_icon_like"
    android:elevation="@dimen/general_elevation"
    android:padding="@dimen/match_card_decision_icon_padding"
    android:scaleType="fitCenter"
    android:scaleX="0"
    android:scaleY="0">

    <ImageView
        android:id="@+id/leftActionImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:tint="@color/custom_match_card_action_positive"/>

</FrameLayout>

<FrameLayout
    android:id="@+id/rightActionImageContainer"
    android:layout_width="@dimen/match_card_decision_icon_size_start"
    android:layout_height="@dimen/match_card_decision_icon_size_start"
    android:layout_centerVertical="true"
    android:layout_alignParentEnd="true"
    android:alpha="0"
    android:background="@drawable/shape_match_decision_icon_reject"
    android:elevation="@dimen/general_elevation"
    android:padding="@dimen/match_card_decision_icon_padding"
    android:scaleType="fitCenter"
    android:scaleX="0"
    android:scaleY="0">

    <ImageView
        android:id="@+id/rightActionImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:tint="@color/custom_match_card_action_negative"/>

</FrameLayout>

<FrameLayout
    android:id="@+id/shadow"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:background="#000"
    android:alpha="0"/>

RoundedView 只是一个扩展RelativeLayout 的类,并使用画布在dispatchDraw 上剪辑路径。

正如在Fabric上看到的,这个问题似乎更多地发生在使用 Android 5.x 的三星身上。

有没有人对这个问题有任何经验或有任何解决它的建议?

提前致谢 :)

标签: androidkotlinmessage-queue

解决方案


推荐阅读