【问题标题】:Cannot access a disposed object exception in xamarin forms project无法访问 xamarin 表单项目中的已处置对象异常
【发布时间】:2017-11-10 12:41:56
【问题描述】:

我正在开发一个 Xamarin Forms(Forms 版本:2.3.4.231)项目。 该应用程序在 iOS 中运行良好,而在 Android 中,我遇到随机崩溃。从崩溃日志来看,它似乎是内部崩溃,但我不知道从哪里开始。

我知道我在应用中没有足够的信息。但是有人可以帮助我更好地理解这个问题吗?

这是崩溃日志:

    11/07/2017 PM 12:33:13.216: Cannot access a disposed object.
Object name: 'Xamarin.Forms.Platform.Android.FormsTextView'.  at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00030] in <b1a275385773449f855cd147e39ca2c4>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeNonvirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00001] in <b1a275385773449f855cd147e39ca2c4>:0 
  at Android.Widget.TextView.set_TextFormatted (Java.Lang.ICharSequence value) [0x00028] in <37dcd078418a4ced956136dfaeb51ee2>:0 
  at Android.Widget.TextView.set_Text (System.String value) [0x00013] in <37dcd078418a4ced956136dfaeb51ee2>:0 
  at Xamarin.Forms.Platform.Android.LabelRenderer.UpdateText () [0x00098] in <1481f85a917c4f2b882ea161e9bc082f>:0 
  at Xamarin.Forms.Platform.Android.LabelRenderer.OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x000c5] in <1481f85a917c4f2b882ea161e9bc082f>:0 
  at (wrapper delegate-invoke) <Module>:invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs)
  at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x00012] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.Element.OnPropertyChanged (System.String propertyName) [0x00000] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject+BindablePropertyContext context, System.Object value, System.Boolean currentlyApplying, Xamarin.Forms.BindableObject+SetValueFlags attributes, System.Boolean silent) [0x000fb] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.BindableObject+SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes) [0x0015b] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.BindingExpression.ApplyCore (System.Object sourceObject, Xamarin.Forms.BindableObject target, Xamarin.Forms.BindableProperty property, System.Boolean fromTarget) [0x001f9] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.BindingExpression.Apply (System.Boolean fromTarget) [0x0003e] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Xamarin.Forms.BindingExpression+BindingExpressionPart.<PropertyChanged>b__47_0 () [0x00000] in <0f1ce60dbc6b4e24af01294c7acf41c6>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () [0x0000b] in <37dcd078418a4ced956136dfaeb51ee2>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <37dcd078418a4ced956136dfaeb51ee2>:0 
  at (wrapper dynamic-method) System.Object:0cbcd7f2-854c-44ac-8467-eb8b42716bc1 (intptr,intptr)

【问题讨论】:

  • 您是否有一些相关代码似乎发生了此异常?
  • 抱歉,我没有太多信息。我不确定这次崩溃发生在哪里。我什至尝试设置异常断点。但该应用不会停在任何地方。
  • 但是,它试图显示的页面的代码/XAML 是什么?该页面涉及什么代码? FormsTextView 发生了一些事情,您是否有任何自定义渲染器?我们需要比您现在提供的更多信息才能说出任何有用的信息。
  • 嗨,我今天早上更新了一个表单应用程序,当页面中有条目时,我遇到了同样的问题(我还没有更多信息)

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

这似乎是许多人遇到的问题(1234)。它可能在 2.3.5 中得到修复,因此请尝试安装 2.3.5 XF 库之一,看看问题是否消失。

还有一些答案here 可能对您有用。

  1. 创建Entry 和/或Label 渲染器,覆盖OnAttachedToWindowDispose 并捕获异常。

  2. 尝试将ListView.CachingStrategy 设置为RecycleElement

【讨论】:

  • ListView.CachingStrategy 到 RecycleElement 对我有用!
【解决方案2】:

不幸的是,我们在 Xamarin.Forms 3.6.X 上遇到了这个错误。这可能会在 4.X 中修复,我不知道,但与此同时,我们能够通过创建我们自己的 LabelRenderer 来解决它,正如@hvaughan3 建议的那样。

为了节省一些打字,这里是:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Label), typeof(Your.Namespace.Renderers.YourLabelRenderer))]
namespace Your.Namespace.Renderers
{
    public class YourLabelRenderer : LabelRenderer
    {
        public YourLabelRenderer(Android.Content.Context context) : base(context) { }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                base.OnElementPropertyChanged(sender, e);
            }
            catch (System.ObjectDisposedException)
            {
                //This is addressing a crash in Xamarin forums 3.6 
            }
        }
    }
}

【讨论】:

  • 我仍然有这个问题 XF4.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多