Skip to content

Pancake view crashes app on dynamic app theme switch: PancakeViewRenderer Cannot access a disposed object #168

Description

@alexeystrakh

I've recently started to use a dynamic theme for a Xamarin.Forms app with AppThemeBinding. Unfortunately, the Pancake view crashes sometimes after first, other times after several theme switches via the system menu. I can reliably reproduce it in my Xamarin.Forms Android app. The UI is as simple as below:

<pancakeview:PancakeView BackgroundColor="{AppThemeBinding Dark={StaticResource TileBackground_Dark}, Light={StaticResource TileBackground_Light}}"> ...

The crash points to Android.Views.View.SetBackgroundColor in PancakeViewRenderer. I'm changing the theme via the context system menu (pulled from the top of the screen):

[AppCenterCrashes] System.ObjectDisposedException: Cannot access a disposed object.
[AppCenterCrashes] Object name: 'Xamarin.Forms.PancakeView.Droid.PancakeViewRenderer'.
[AppCenterCrashes] at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <c2283cbfa9df4045adcb3fe5939ebddf>:0
[AppCenterCrashes] at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <c2283cbfa9df4045adcb3fe5939ebddf>:0
[AppCenterCrashes] at Android.Views.View.SetBackgroundColor (Android.Graphics.Color color) [0x0001e] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Android.Views.View.cs:22288
[AppCenterCrashes] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].UpdateBackgroundColor () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:491
[AppCenterCrashes] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x00017] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:368
[AppCenterCrashes] at Xamarin.Forms.PancakeView.Droid.PancakeViewRenderer.OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x00009] in <a1f8c5f59e794e2b99a9a6be6aa81de2>:0
[AppCenterCrashes] at (wrapper delegate-invoke) <Module>.invoke_void_object_PropertyChangedEventArgs(object,System.ComponentModel.PropertyChangedEventArgs)
[AppCenterCrashes] at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:266
[AppCenterCrashes] at Xamarin.Forms.Element.OnPropertyChanged (System.String propertyName) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Element.cs:362
[AppCenterCrashes] at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject+BindablePropertyContext context, System.Object value, System.Boolean currentlyApplying, Xamarin.Forms.Internals.SetValueFlags attributes, System.Boolean silent) [0x00114] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:510
[AppCenterCrashes] at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes) [0x00173] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:446
[AppCenterCrashes] at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\BindableObject.cs:383
[AppCenterCrashes] at Xamarin.Forms.AppThemeBinding.ApplyCore () [0x00018] in D:\a\1\s\Xamarin.Forms.Core\AppThemeBinding.cs:47
[AppCenterCrashes] at Xamarin.Forms.AppThemeBinding.<.ctor>b__2_1 () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\AppThemeBinding.cs:10
[AppCenterCrashes] at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36
[AppCenterCrashes] at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Java.Lang.IRunnable.cs:90
[AppCenterCrashes] at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.39(intptr,intptr)
**System.ObjectDisposedException:** 'Cannot access a disposed object.
Object name: 'Xamarin.Forms.PancakeView.Droid.PancakeViewRenderer'.'[mono-rt] [ERROR] FATAL UNHANDLED EXCEPTION: System.ObjectDisposedException: Cannot access a disposed object.
[mono-rt] Object name: 'Xamarin.Forms.PancakeView.Droid.PancakeViewRenderer'.
[mono-rt] at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.39(intptr,intptr)
[mono-rt] at (wrapper native-to-managed) Android.Runtime.DynamicMethodNameCounter.39(intptr,intptr)

As you can see, there is no custom code in the stack trace, only the PancakeViewRenderer.
How can I fix the issue?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions