Webview is crashing, but not able to reproduce exact case.
asimkumars opened this issue ยท 13 comments
Hi,
Webview is crashing, but not able to reproduce exact case. we have used the below version of the restring library
restrings = '5.1.4'
viewpump = '4.0.7'
reword = '4.0.1'
applocale = '2.0.3'
we are using 1.3.1 of appcompact.
below is the crash from stack trace which is not reproducable everytime, i was just trying to navigate to different window or something inside webview then i got this crash.
android.content.res.Resources$NotFoundException: String resource ID #0x313004a
E/SensorManager: nativeGetSensorAtIndex: name, vendor - 0, K2HH Acceleration , STM
E/SensorManager: nativeGetSensorAtIndex: name, vendor - 1, GP2A002 Proximity Sensor, SHARP
E/SensorManager: nativeGetSensorAtIndex: name, vendor - 2, Screen Orientation Sensor, Samsung Electronics
E/File: fail readDirectory() errno=2
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.next.nlp, PID: 16554
android.content.res.Resources$NotFoundException: String resource ID #0x313004a
at android.content.res.Resources.getText(Resources.java:1484)
at android.content.res.Resources.getString(Resources.java:1580)
at dev.b3nedikt.restring.internal.ResourcesDelegate.getString(ResourcesDelegate.kt:50)
at dev.b3nedikt.restring.internal.RestringResources.getString(RestringResources.kt:41)
at android.content.Context.getString(Context.java:415)
at org.chromium.content.browser.selection.SelectionPopupControllerImpl.j(chromium-SystemWebViewGoogle.aab-stable-460607100:49)
at b9.onActionItemClicked(chromium-SystemWebViewGoogle.aab-stable-460607100:19)
at my.onActionItemClicked(chromium-SystemWebViewGoogle.aab-stable-460607100:1)
at com.android.internal.policy.PhoneWindow$DecorView$ActionModeCallback2Wrapper.onActionItemClicked(PhoneWindow.java:4234)
at com.android.internal.view.FloatingActionMode$4.onMenuItemSelected(FloatingActionMode.java:108)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:801)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:954)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:944)
at com.android.internal.view.FloatingActionMode$5.onMenuItemClick(FloatingActionMode.java:138)
at com.android.internal.widget.FloatingToolbar$FloatingToolbarMainPanel$1.onClick(FloatingToolbar.java:1298)
at android.view.View.performClick(View.java:5716)
at android.widget.TextView.performClick(TextView.java:10926)
at android.view.View$PerformClick.run(View.java:22596)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
There is another repetitive crash looks like below.
Fatal Exception: android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:295)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2516)
at android.content.res.Resources.getLayout(Resources.java:1340)
at dev.b3nedikt.restring.internal.RestringResources.getLayout(RestringResources.kt:162)
at android.view.LayoutInflater.inflate(LayoutInflater.java:546)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:425)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:416)
at jh0.getView(chromium-TrichromeWebViewGoogle.aab-stable-460607133:2)
at android.widget.AbsListView.obtainView(AbsListView.java:2601)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1417)
at android.widget.ListView.onMeasure(ListView.java:1323)
at android.view.View.measure(View.java:25813)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7030)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25813)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7030)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25813)
at com.android.internal.widget.AlertDialogLayout.tryOnMeasure(AlertDialogLayout.java:146)
at com.android.internal.widget.AlertDialogLayout.onMeasure(AlertDialogLayout.java:71)
at android.view.View.measure(View.java:25813)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7030)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25813)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7030)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25813)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7030)
at com.android.internal.policy.DecorView.measureChildWithMargins(DecorView.java:3126)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:860)
at android.view.View.measure(View.java:25813)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3750)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2474)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2791)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2218)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8697)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
at android.view.Choreographer.doCallbacks(Choreographer.java:849)
at android.view.Choreographer.doFrame(Choreographer.java:779)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8218)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
getting same crashes.
was not able to reproduce the first one.
the second one are reproducible with restring-master example
steps to reproduce:
- create class that extends webView, for ex:
class TESTWebView : WebView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(
context,
attrs,
defStyle
)
}
- add to the layout:
<dev.b3nedikt.restring.example.TESTWebView
android:id="@+id/webView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/topStringTest"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/quantityStringTextView" />
- add the logic to main fragment:
webView.apply {
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
}
webView.loadDataWithBaseURL(
"",
html
,"text/html", "utf-8", null
)
where html variable is:
private val html = "<dialog id=\"favDialog\">\n" +
" <form method=\"dialog\">\n" +
" <section>\n" +
" <p><label for=\"favAnimal\">Favorite animal:</label>\n" +
" <select id=\"favAnimal\">\n" +
" <option></option>\n" +
" <option>Brine shrimp</option>\n" +
" <option>Red panda</option>\n" +
" <option>Spider monkey</option>\n" +
" </select></p>\n" +
" </section>\n" +
" <menu>\n" +
" <button id=\"cancel\" type=\"reset\">Cancel</button>\n" +
" <button type=\"submit\">Confirm</button>\n" +
" </menu>\n" +
" </form>\n" +
"</dialog>\n" +
"\n" +
"<menu>\n" +
" <button id=\"updateDetails\">Update details</button>\n" +
"</menu>\n" +
"\n" +
"<script>\n" +
" (function() {\n" +
" var updateButton = document.getElementById('updateDetails');\n" +
" var cancelButton = document.getElementById('cancel');\n" +
" var favDialog = document.getElementById('favDialog');\n" +
"\n" +
" // Update button opens a modal dialog\n" +
" updateButton.addEventListener('click', function() {\n" +
" favDialog.showModal();\n" +
" });\n" +
"\n" +
" // Form cancel button closes the dialog box\n" +
" cancelButton.addEventListener('click', function() {\n" +
" favDialog.close();\n" +
" });\n" +
"\n" +
" })();\n" +
"</script>"
- run the app, click on "update details" -> drop down -> crash
what I noticed:
- crashes on API 29, working on API 23. I haven't tried other api for now
- no crashes in case I use WebView instead of TESTWebView on the layout
- as a hot fix using app context helped:
ViewPumpAppCompatDelegate(
baseDelegate = super.getDelegate(),
baseContext = this,
wrapContext = { baseContext -> Restring.wrapContext(baseContext.applicationContext) }
)
but: a) the first issue seems still appears on android 6 (i'm not able to reproduce, but see crashlogs). b) not sure it is the right way to fix.
Seems the 2d issue appears also on Samsung tablets with android 9
android.content.res.ResourcesImpl.getResourceEntryName ResourcesImpl.java:291
android.content.res.Resources.getResourceEntryName Resources.java:2017
r0.a.a.e.b.d SourceFile:2
dev.b3nedikt.restring.internal.RestringResources.getString SourceFile:3
android.content.Context.getString Context.java:580
org.chromium.content.browser.selection.SelectionPopupControllerImpl.i chromium-Monochrome.aab-stable-460608523:49
rx.onActionItemClicked chromium-Monochrome.aab-stable-460608523:17
V51.onActionItemClicked chromium-Monochrome.aab-stable-460608523:1
com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked DecorView.java:3180
com.android.internal.view.FloatingActionMode$3.onMenuItemSelected FloatingActionMode.java:98
com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected MenuBuilder.java:776
com.android.internal.view.menu.MenuItemImpl.invoke MenuItemImpl.java:155
com.android.internal.view.menu.MenuBuilder.performItemAction MenuBuilder.java:923
com.android.internal.view.menu.MenuBuilder.performItemAction MenuBuilder.java:913
com.android.internal.view.FloatingActionMode.lambda$setFloatingToolbar$0 FloatingActionMode.java:128
com.android.internal.view.-$$Lambda$FloatingActionMode$LU5MpPuKYDtwlFAuYhXYfzgLNLE.onMenuItemClick
com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$2.onClick FloatingToolbar.java:484
android.view.View.performClick View.java:7352
android.view.View.performClickInternal View.java:7318
android.view.View.access$3200 View.java:846
android.view.View$PerformClick.run View.java:27800
android.os.Handler.handleCallback Handler.java:873
android.os.Handler.dispatchMessage Handler.java:99
android.os.Looper.loop Looper.java:214
android.app.ActivityThread.main ActivityThread.java:7050
java.lang.reflect.Method.invoke Method.java
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:494
com.android.internal.os.ZygoteInit.main ZygoteInit.java:965
Hi,
I fixed the second issue with ViewPump 4.0.8. Your fix is okay as well though ;)
For the first issue I really can't do much without more input on how to reproduce it. As it could be unrelated to restring, I am closing this issue for now. Feel free to reopen should you experience it again.
Hi, thank you for fixing. Seems it should fix both issues. I found that: "The framework needs to know about all the resources objects so that it can update them when webview is loaded (since webview adds additional paths to the asset manager)"
Just to follow up here I still see a few hundred instances (in last 90 days) of the android.content.res.Resources$NotFoundException: Resource ID #0x0
exception happening for users of my app when they attempt to open a custom webview activity and my app has been on viewpump version 4.0.10 since Jan' 2022 so I don't think the 4.0.8 change fixed all issues.
I will try updating my ViewPumpAppCompatDelegate instantiation to pass in the applicationContext as @SiarheiSm tried previously and see if that helps in the coming releases:
ViewPumpAppCompatDelegate(
baseDelegate = super.getDelegate(),
baseContext = this,
wrapContext = { baseContext -> Restring.wrapContext(baseContext.applicationContext) }
)
Thanks for so many great and helpful libraries!
Here is another stack trace which looks similar:
Fatal Exception: android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:266)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2585)
at android.content.res.Resources.getLayout(Resources.java:1335)
at dev.b3nedikt.restring.internal.RestringResources.getLayout(RestringResources.kt:162)
at android.view.LayoutInflater.inflate(LayoutInflater.java:537)
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:425)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:416)
at androidx.core.widget.CheckedTextViewCompat.getView(CheckedTextViewCompat.java:11)
at android.widget.AbsListView.obtainView(AbsListView.java:2414)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1417)
at android.widget.ListView.onMeasure(ListView.java:1323)
at android.view.View.measure(View.java:26653)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7074)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26653)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7074)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26653)
at com.android.internal.widget.AlertDialogLayout.tryOnMeasure(AlertDialogLayout.java:146)
at com.android.internal.widget.AlertDialogLayout.onMeasure(AlertDialogLayout.java:71)
at android.view.View.measure(View.java:26653)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7074)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26653)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7074)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26653)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7074)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:829)
at android.view.View.measure(View.java:26653)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4060)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2704)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3009)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2442)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9375)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1388)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1396)
at android.view.Choreographer.doCallbacks(Choreographer.java:1033)
at android.view.ChoreographerExtImpl.checkScrollOptSceneEnable(ChoreographerExtImpl.java:408)
at android.view.Choreographer.doFrame(Choreographer.java:900)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1371)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8364)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
I recently updated our deps to the following:
const val restring = "dev.b3nedikt.restring:restring:5.2.2"
const val viewPump = "dev.b3nedikt.viewpump:viewpump:4.0.10"
const val reword = "dev.b3nedikt.reword:reword:4.0.4"
but these errors could be coming from the following set of deps:
const val restring = "dev.b3nedikt.restring:restring:5.1.4"
const val viewPump = "dev.b3nedikt.viewpump:viewpump:4.0.10"
const val reword = "dev.b3nedikt.reword:reword:4.0.2"
(Bumped restring and reword most recently)
Also confirmed that all instances of the exception occur on Android 10 (api 29) and above.
I forked the project and modified the sample to reproduce the issue, just launch the app and click on the select in the webview; I was able to reproduce on the following emulator images:
- Android 9.0 Google APIs | arm64 (API 28)
- Android 12.0 Google Play | arm64 (API 31)
- Android 13.0 Google Play | arm64 (API 33)
The crash did not occur on Android 7.1.1 Google APIs | arm64 (API 25)
As a workaround to the crash in my apps, I instantiated a WebView in Application.onCreate()
https://issuetracker.google.com/issues/77246450#comment12
@OvoMaS This is fixed with ViewPump 1.0.11. Does updating to this version work for you?
@B3nedikt Thanks for the quick fix, I'm not currently working on the project impacted by this issue but I will update ViewPump and let you know as soon as possible.
@B3nedikt Unfortunately API 28 still crashes, although with a different stacktrace:
FATAL EXCEPTION: main Process: dev.b3nedikt.restring.example, PID: 22271 android.view.InflateException: Binary XML file line #30: Binary XML file line #30: Error inflating class TextView Caused by: android.view.InflateException: Binary XML file line #30: Error inflating class TextView Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 2 to dimension: type=0x1 at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:736) at android.widget.TextView.readTextAppearance(TextView.java:3552) at android.widget.TextView.<init>(TextView.java:959) at android.widget.TextView.<init>(TextView.java:869) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:113) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:108) at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:228) at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:148) at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1678) at androidx.appcompat.app.AppCompatDelegateWrapper.createView(AppCompatDelegateWrapper.kt:156) at androidx.appcompat.app.ViewPumpAppCompatDelegate.access$createView$s1741359083(ViewPumpAppCompatDelegate.kt:31) at androidx.appcompat.app.ViewPumpAppCompatDelegate$createView$1.invoke(ViewPumpAppCompatDelegate.kt:71) at androidx.appcompat.app.ViewPumpAppCompatDelegate$createView$1.invoke(ViewPumpAppCompatDelegate.kt:57) at dev.b3nedikt.viewpump.internal.InterceptorChain.proceed(InterceptorChain.kt:26) at dev.b3nedikt.reword.RewordInterceptor.intercept(RewordInterceptor.kt:34) at dev.b3nedikt.viewpump.internal.InterceptorChain.proceed(InterceptorChain.kt:37) at androidx.appcompat.app.ViewPumpAppCompatDelegate.inflate(ViewPumpAppCompatDelegate.kt:122) at androidx.appcompat.app.ViewPumpAppCompatDelegate.createView(ViewPumpAppCompatDelegate.kt:57) at androidx.appcompat.app.ViewPumpAppCompatDelegate.onCreateView(ViewPumpAppCompatDelegate.kt:108) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at org.chromium.ui.DropdownAdapter.getView(DropdownAdapter.java:22) at org.chromium.ui.UiUtils.computeMaxWidthOfListAdapterItems(UiUtils.java:24) at org.chromium.ui.DropdownPopupWindow.show(DropdownPopupWindow.java:18) at org.chromium.ui.DropdownPopupWindow$1.onLayoutChange(DropdownPopupWindow.java:4) at android.view.View.layout(View.java:20690) at android.widget.AbsoluteLayout.onLayout(AbsoluteLayout.java:123) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1855) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1855) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656) at android.widget.LinearLayout.onLayout(LinearLayout.java:1565) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656) at android.widget.LinearLayout.onLayout(LinearLayout.java:1565) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:753) at android.view.View.layout(View.java:20672) at android.view.ViewGroup.layout(ViewGroup.java:6194) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) at android.view.Choreographer.doCallbacks(Choreographer.java:761) at android.view.Choreographer.doFrame(Choreographer.java:696) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
The crash did not occur on API 23, 25, 31, and 33; reproducible on sample project (updated for ViewPump 4.0.11).