回收视图和AdapterHelper中的Android ANR
我看到在回收视图和AdapterHelper中的Android ANR,android,android-recyclerview,android-anr-dialog,Android,Android Recyclerview,Android Anr Dialog,我看到在androidx.recyclerview.widget.AdapterHelper.findPositionOffset中发生了相当多的ANR。该线程是可运行的,但我看不出其他线程有任何问题,这些线程都在等待或本机运行 这是main的堆栈跟踪: "main" prio=5 tid=1 Runnable at androidx.recyclerview.widget.AdapterHelper.findPositionOffset (AdapterHelper.j
androidx.recyclerview.widget.AdapterHelper.findPositionOffset
中发生了相当多的ANR。该线程是可运行的,但我看不出其他线程有任何问题,这些线程都在等待或本机运行
这是main
的堆栈跟踪:
"main" prio=5 tid=1 Runnable
at androidx.recyclerview.widget.AdapterHelper.findPositionOffset (AdapterHelper.java:472)
at androidx.recyclerview.widget.AdapterHelper.canFindInPreLayout (AdapterHelper.java:422)
at androidx.recyclerview.widget.AdapterHelper.applyUpdate (AdapterHelper.java:194)
at androidx.recyclerview.widget.AdapterHelper.preProcess (AdapterHelper.java:105)
at androidx.recyclerview.widget.RecyclerView.processAdapterUpdatesAndSetAnimationFlags (RecyclerView.java:3793)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1 (RecyclerView.java:4039)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout (RecyclerView.java:3849)
at androidx.recyclerview.widget.RecyclerView.onLayout (RecyclerView.java:4404)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout (SwipeRefreshLayout.java:689)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at androidx.coordinatorlayout.widget.CoordinatorLayout.layoutChild (CoordinatorLayout.java:1213)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayoutChild (CoordinatorLayout.java:899)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout (CoordinatorLayout.java:919)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout (LinearLayout.java:1582)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at androidx.drawerlayout.widget.DrawerLayout.onLayout (DrawerLayout.java:1231)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout (LinearLayout.java:1582)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout (LinearLayout.java:1582)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
at android.widget.FrameLayout.onLayout (FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout (DecorView.java:779)
at android.view.View.layout (View.java:21931)
at android.view.ViewGroup.layout (ViewGroup.java:6260)
at android.view.ViewRootImpl.performLayout (ViewRootImpl.java:3081)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2591)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1722)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7605)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1029)
at android.view.Choreographer.doCallbacks (Choreographer.java:852)
at android.view.Choreographer.doFrame (Choreographer.java:787)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1014)
at android.os.Handler.handleCallback (Handler.java:883)
at android.os.Handler.dispatchMessage (Handler.java:100)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:7397)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:935)
如果
main
线程不是问题所在,那么还有什么原因会导致这种情况呢?我们似乎也有同样的问题。你找到解决办法了吗?绝对没有,解决办法是“编写更好的代码”。此问题通常来自对列表的多线程访问或通过RecyclerView回调修改列表。