我有一个带有SyncFusion列表视图的Xamarin.Forms应用程序(SfListView)。它会导致Android上的频繁崩溃,并出现以下错误:
Unhandled exception: System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Syncfusion.ListView.XForms.Android.ExtendedScrollViewRenderer'.
at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <7cfbebb561c54efc9010b018c0846c7e>:0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualBooleanMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <7cfbebb561c54efc9010b018c0846c7e>:0
at Android.Views.View.get_IsLayoutRequested () [0x0000a] in <9ef29c909d7e4606a46b131129da3975>:0
at Xamarin.Forms.Platform.Android.ScrollViewRenderer+<OnScrollToRequested>d__58.MoveNext () [0x000ce] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:309
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0
at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state) [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0
at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <9ef29c909d7e4606a46b131129da3975>:0
at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <9ef29c909d7e4606a46b131129da3975>:0
at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <9ef29c909d7e4606a46b131129da3975>:0
at (wrapper dynamic-method) System.Object:ab79b1ac-9c45-4d56-89ec-c42ce2376e50 (intptr,intptr)
我已经联系过SyncFusion,他们说这是一个框架问题。
将列表视图呈现到自定义选项卡式容器中。
与Xamarin.Forms 2.3到2.5(最新)一起使用,但问题仍然存在。 对此有何建议或想法?
答案 0 :(得分:0)
您可以阅读:System.ObjectDisposedException: Cannot access a disposed object。
明确将CachingStrategy
上的ListView
设置为RecycleElement
。
您可以尝试更改默认的Garbage Bridge
收藏家。 Xamarin.Android
默认为Tarjan
,将其更改为new
GC Bridge,然后重试:
在environment.text
项目中创建一个Xamarin.Android
文件,BuildAction
设置为AndroidEnvironment
。
然后,您可以通过将GC_BRIDGE
,bridge-implementation=old
或bridge-implementation=new
传递给bridge-implementation=tarjan
环境变量,指定您的应用应使用哪个MONO_GC_PARAMS
选项
例如:
MONO_GC_PARAMS=bridge-implementation=new
然后重建并测试您的项目。
参考:
https://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/#GC_Bridge_Options
https://blog.xamarin.com/xamarin-android-garbage-collection-improvements/
答案 1 :(得分:0)
不是真正的解决方法,但我发现Task.Run( () => DoWork() );
适用于ListView
没有的情况 - 它只是为Andriod而崩溃。
所以我用它来解决这个问题:
SfListView
答案 2 :(得分:0)
可能this thread上有一个解决方案,只需检查注释即可。问题的根源似乎在于清除ObservableCollection列表的方式。代替使用.Clear()方法,您应该尝试将其分配给新列表:
所以代替:
ObservableCollectionProperty.Clear();
使用:
ObservableCollectionProperty = new ObservableCollection<TypeGoesHere>();
希望这会有所帮助,因为它似乎可以解决我所提供的链接中提到的自定义控件所面临的问题。