Overview (Required)
textLayout without initialization in FilterChip.textLayout is initialized at onMeasure procedure.onDraw without initializing textLayout.Steps To Reproduce
It's not consistently reproducible but I have observed the issue several times with these steps.
Expected behavior
Resume session list screen without a crash.
Env:
Stacktrace:
io.github.droidkaigi.confsched2020.ui.widget.FilterChip.onDraw (FilterChip.java:291)
android.view.View.draw (View.java:21975)
android.view.View.updateDisplayListIfDirty (View.java:20852)
android.view.View.draw (View.java:21707)
android.view.ViewGroup.drawChild (ViewGroup.java:4432)
android.view.ViewGroup.dispatchDraw (ViewGroup.java:4193)
android.view.View.updateDisplayListIfDirty (View.java:20843)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
android.view.View.updateDisplayListIfDirty (View.java:20812)
android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:581)
android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:587)
android.view.ThreadedRenderer.draw (ThreadedRenderer.java:664)
android.view.ViewRootImpl.draw (ViewRootImpl.java:3767)
android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3495)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2779)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1745)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7768)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:967)
android.view.Choreographer.doCallbacks (Choreographer.java:791)
android.view.Choreographer.doFrame (Choreographer.java:726)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:952)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:214)
android.app.ActivityThread.main (ActivityThread.java:7356)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930)
Can I try?
I can't reproduce this problem in my environment yet.
However, I feel this problem can be fixed by removing the "unstable" lateinit call. 馃暤
Of course, assigned 馃憤
Sorry, I can't reproduce this issue in the latest conference app. (DroidKaigi 2020 #227)
And I can not found the DeployGate link DroidKaigi 2020 #130...
@KeithYokoma
Hi, can you reproduce this issue in the latest conference app?
@roana0229
Sorry, I give up. I can't reproduce this issue.
Maybe, we can avoid this issue to change lateinit property to nullable property.
https://github.com/DroidKaigi/conference-app-2020/blob/master/corecomponent/androidcomponent/src/main/java/io/github/droidkaigi/confsched2020/ui/widget/FilterChip.kt#L146
However, this workaround is not good because the root cause cannot be fix.
To investigate this issue I want reproduce, but I can't do.
So, I give up now. Sorry 馃檹
No need to apologize 馃槃
Thank you for your dedicated investigation. 馃憤