dotnet / maui

.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
https://dot.net/maui
MIT License
21.64k stars 1.62k forks source link

ShellSearchHandler WindowManager$BadTokenException on Android #21088

Open Larhei opened 2 months ago

Larhei commented 2 months ago

Description

We are getting stability issues from Pre-Launch on Android that we are not able to reproduce when doing manual testing.

Exception android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? at android.view.ViewRootImpl.setView (ViewRootImpl.java:1189) at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:400) at android.view.WindowManagerImpl.addView (WindowManagerImpl.java:139) at android.widget.PopupWindow.invokePopup (PopupWindow.java:1576) at android.widget.PopupWindow.showAsDropDown (PopupWindow.java:1423) at android.widget.ListPopupWindow.show (ListPopupWindow.java:722) at android.widget.AutoCompleteTextView.showDropDown (AutoCompleteTextView.java:1317) at crc640ec207abc449b2ca.ShellSearchView.n_afterTextChanged at crc640ec207abc449b2ca.ShellSearchView.afterTextChanged (ShellSearchView.java:98) at android.widget.TextView.sendAfterTextChanged (TextView.java:10805) at android.widget.TextView.setText (TextView.java:6407) at android.widget.TextView.setText (TextView.java:6227) at android.widget.EditText.setText (EditText.java:121) at android.widget.TextView.setText (TextView.java:6179) at crc640ec207abc449b2ca.ShellSectionRenderer.n_onCreateView at crc640ec207abc449b2ca.ShellSectionRenderer.onCreateView (ShellSectionRenderer.java:44) at androidx.fragment.app.Fragment.performCreateView (Fragment.java:3114) at androidx.fragment.app.FragmentStateManager.createView (FragmentStateManager.java:557) at androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:272) at androidx.fragment.app.FragmentManager.executeOpsTogether (FragmentManager.java:1943) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute (FragmentManager.java:1845) at androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:1782) at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:3042) at androidx.fragment.app.FragmentManager.dispatchViewCreated (FragmentManager.java:2945) at androidx.fragment.app.Fragment.performViewCreated (Fragment.java:3148) at androidx.fragment.app.FragmentStateManager.createView (FragmentStateManager.java:588) at androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:272) at androidx.fragment.app.FragmentManager.executeOpsTogether (FragmentManager.java:1943) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute (FragmentManager.java:1845) at androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:1782) at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:3042) at androidx.fragment.app.FragmentManager.dispatchActivityCreated (FragmentManager.java:2952) at androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java:263) at androidx.fragment.app.FragmentActivity.onStart (FragmentActivity.java:350) at androidx.appcompat.app.AppCompatActivity.onStart (AppCompatActivity.java:251) at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1467) at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart (MonitoringInstrumentation.java:2) at android.app.Activity.performStart (Activity.java:8099) at android.app.ActivityThread.handleStartActivity (ActivityThread.java:3732) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2253) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:7870) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1003)

We have a Shell with Flyout and a Page with a Searchhandler. Short the before the crash it looks to me the robot is clicking the burger menu twice.

Sorry for not providing a repro.

Steps to Reproduce

No response

Link to public reproduction project repository

Source

Version with bug

8.0.6 SR1

Is this a regression from previous behavior?

No, this is something new

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

Android 30, 31, 32, 33, 34

Did you find any workaround?

Not without overwirting the complete SearchHandlerAppearanceTracker

Relevant log output

3-04 01:24:24.821: I/MonoDroid(11240): UNHANDLED EXCEPTION:
03-04 01:24:24.867: I/MonoDroid(11240): Java.Lang.RuntimeException: Unable to add window -- token null is not valid; is your activity running?
03-04 01:24:24.867: I/MonoDroid(11240):    at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference , JniMethodInfo , JniArgumentValue* )
03-04 01:24:24.867: I/MonoDroid(11240):    at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String , IJavaPeerable , JniArgumentValue* )
03-04 01:24:24.867: I/MonoDroid(11240):    at Android.Widget.AutoCompleteTextView.ShowDropDown()
03-04 01:24:24.867: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellSearchView.Android.Text.ITextWatcher.AfterTextChanged(IEditable s)
03-04 01:24:24.867: I/MonoDroid(11240):    at Android.Text.ITextWatcherInvoker.n_AfterTextChanged_Landroid_text_Editable_(IntPtr jnienv, IntPtr native__this, IntPtr native_s)
03-04 01:24:24.867: I/MonoDroid(11240):    at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPL_V(_JniMarshal_PPL_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0)
03-04 01:24:24.867: I/MonoDroid(11240): --- End of stack trace from previous location ---
03-04 01:24:24.868: I/MonoDroid(11240):    at Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod(JniObjectReference , JniObjectReference , JniMethodInfo , JniArgumentValue* )
03-04 01:24:24.868: I/MonoDroid(11240):    at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod(String , IJavaPeerable , JniArgumentValue* )
03-04 01:24:24.868: I/MonoDroid(11240):    at Android.Widget.TextView.set_Text(String )
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.SearchHandlerAppearanceTracker.UpdateTextTransform()
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.SearchHandlerAppearanceTracker.UpdateSearchBarColors()
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.SearchHandlerAppearanceTracker..ctor(IShellSearchView searchView, IShellContext shellContext)
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellSearchView.CreateSearchHandlerAppearanceTracker()
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellSearchView.Microsoft.Maui.Controls.Platform.Compatibility.IShellSearchView.LoadView()
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellToolbarTracker.UpdateToolbarItems(Toolbar toolbar, Page page)
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellToolbarTracker.UpdateToolbarItems()
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellToolbarTracker.OnPageChanged(Page oldPage, Page newPage)
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellToolbarTracker.set_Page(Page value)
03-04 01:24:24.868: I/MonoDroid(11240):    at Microsoft.Maui.Controls.Platform.Compatibility.ShellSectionRenderer.OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
03-04 01:24:24.868: I/MonoDroid(11240):    at AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_(IntPtr jnienv, IntPtr native__this, IntPtr native_inflater, IntPtr native_container, IntPtr native_savedInstanceState)
03-04 01:24:24.868: I/MonoDroid(11240):    at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L(_JniMarshal_PPLLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2)
03-04 01:24:24.868: I/MonoDroid(11240):   --- End of managed Java.Lang.RuntimeException stack trace ---
03-04 01:24:24.868: I/MonoDroid(11240): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
03-04 01:24:24.868: I/MonoDroid(11240):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:1189)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:400)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:139)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:1576)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1423)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.ListPopupWindow.show(ListPopupWindow.java:722)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1317)
03-04 01:24:24.868: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSearchView.n_afterTextChanged(Native Method)
03-04 01:24:24.868: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSearchView.afterTextChanged(ShellSearchView.java:98)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.TextView.sendAfterTextChanged(TextView.java:10805)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6407)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6227)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.EditText.setText(EditText.java:121)
03-04 01:24:24.868: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6179)
03-04 01:24:24.868: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSectionRenderer.n_onCreateView(Native Method)
03-04 01:24:24.868: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSectionRenderer.onCreateView(ShellSectionRenderer.java:44)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3114)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:557)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
03-04 01:24:24.868: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2945)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3148)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467)
03-04 01:24:24.869: I/MonoDroid(11240):     at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:2)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.Activity.performStart(Activity.java:8099)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.os.Handler.dispatchMessage(Handler.java:106)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.os.Looper.loopOnce(Looper.java:201)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.os.Looper.loop(Looper.java:288)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.app.ActivityThread.main(ActivityThread.java:7870)
03-04 01:24:24.869: I/MonoDroid(11240):     at java.lang.reflect.Method.invoke(Native Method)
03-04 01:24:24.869: I/MonoDroid(11240):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
03-04 01:24:24.869: I/MonoDroid(11240):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-04 01:24:24.869: I/MonoDroid(11240):   --- End of managed Java.Lang.RuntimeException stack trace ---
03-04 01:24:24.869: I/MonoDroid(11240): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
03-04 01:24:24.869: I/MonoDroid(11240):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:1189)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:400)
03-04 01:24:24.869: I/MonoDroid(11240):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:139)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:1576)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1423)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.ListPopupWindow.show(ListPopupWindow.java:722)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1317)
03-04 01:24:24.870: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSearchView.n_afterTextChanged(Native Method)
03-04 01:24:24.870: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSearchView.afterTextChanged(ShellSearchView.java:98)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.TextView.sendAfterTextChanged(TextView.java:10805)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6407)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6227)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.EditText.setText(EditText.java:121)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.widget.TextView.setText(TextView.java:6179)
03-04 01:24:24.870: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSectionRenderer.n_onCreateView(Native Method)
03-04 01:24:24.870: I/MonoDroid(11240):     at crc640ec207abc449b2ca.ShellSectionRenderer.onCreateView(ShellSectionRenderer.java:44)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3114)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:557)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2945)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3148)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1467)
03-04 01:24:24.870: I/MonoDroid(11240):     at androidx.test.runner.MonitoringInstrumentation.callActivityOnStart(MonitoringInstrumentation.java:2)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.Activity.performStart(Activity.java:8099)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3732)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.os.Handler.dispatchMessage(Handler.java:106)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.os.Looper.loopOnce(Looper.java:201)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.os.Looper.loop(Looper.java:288)
03-04 01:24:24.870: I/MonoDroid(11240):     at android.app.ActivityThread.main(ActivityThread.java:7870)
03-04 01:24:24.870: I/MonoDroid(11240):     at java.lang.reflect.Method.invoke(Native Method)
03-04 01:24:24.870: I/MonoDroid(11240):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
03-04 01:24:24.870: I/MonoDroid(11240):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-04 01:24:24.905: D/MonitoringInstr(11240): Handling an uncaught exception thrown on the thread main.
PureWeen commented 2 months ago

Can you try to create a repro or maybe add some context about your shell structure?

Larhei commented 2 months ago

I will try my best... but from my research it looks like the popup gets opened to early because in the middle of creating the view. Found some advice to move the popuprelated code to OnViewCreated... But did not found time to test it..

Larhei commented 1 month ago

@PureWeen

Got it. Source is in the repro

When testing it with adb shell monkey -p com.companyname.searchhandlercrash 5000

I got

`// CRASH: com.companyname.searchhandlercrash (pid 17040) // Short Msg: android.view.WindowManager$BadTokenException // Long Msg: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? // Build Label: google/sdk_gphone64_x86_64/emu64xa:14/UPB5.230623.003/10615560:userdebug/dev-keys // Build Changelist: 10615560 // Build Time: 1691193509000 // android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? // at android.view.ViewRootImpl.setView(ViewRootImpl.java:1395) // at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:411) // at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:150) // at android.widget.PopupWindow.invokePopup(PopupWindow.java:1580) // at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1427) // at android.widget.ListPopupWindow.show(ListPopupWindow.java:722) // at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1332) // at crc640ec207abc449b2ca.ShellSearchView.n_afterTextChanged(Native Method) // at crc640ec207abc449b2ca.ShellSearchView.afterTextChanged(ShellSearchView.java:98) // at android.widget.TextView.sendAfterTextChanged(TextView.java:12365) // at android.widget.TextView.setText(TextView.java:7196) // at android.widget.TextView.setText(TextView.java:6994) // at android.widget.EditText.setText(EditText.java:149) // at android.widget.TextView.setText(TextView.java:6946) // at crc640ec207abc449b2ca.ShellSectionRenderer.n_onCreateView(Native Method) // at crc640ec207abc449b2ca.ShellSectionRenderer.onCreateView(ShellSectionRenderer.java:44) // at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3114) // at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:557) // at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272) // at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943) // at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845) // at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782) // at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042) // at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2945) // at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3148) // at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588) // at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272) // at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943) // at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845) // at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782) // at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3042) // at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952) // at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263) // at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350) // at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251) // at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1582) // at android.app.Activity.performStart(Activity.java:8628) // at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3807) // at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:225) // at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:205) // at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:177) // at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98) // at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443) // at android.os.Handler.dispatchMessage(Handler.java:106) // at android.os.Looper.loopOnce(Looper.java:205) // at android.os.Looper.loop(Looper.java:294) // at android.app.ActivityThread.main(ActivityThread.java:8177) // at java.lang.reflect.Method.invoke(Native Method) // at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) // at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) // ** Monkey aborted due to error. Events injected: 205

Network stats: elapsed time=2436ms (0ms mobile, 0ms wifi, 2436ms not connected)

** System appears to have crashed at event 205 of 5000 using seed 1710980169422`

Larhei commented 1 month ago

@PureWeen

ok... also found a way to reproduce without monkey.

  1. Switch emulator to developer mode.
  2. Enable "Don't keep activities" in developer options.
  3. Start the sample
  4. Enter something in the Searchhandler. Keep focus in Seachthandler
  5. Switch to an other App on the Emulator via Circle Button.
  6. Switch back to the Sample app via Rectangle Button.

The App should crash. So it´s Android lifecycle related.

QianaJiao commented 1 month ago

Verified this issue with Visual Studio 17.10.0 Preview 2. Can repro on Android platform with sample project. If I didn't Enable "Don't keep activities" in developer options, the issue will not occur.