在SetProperty

时间:2016-06-02 07:31:59

标签: android xamarin properties mvvmcross sigsegv

我使用MVVMCross 4.1.6(在4.1.4上试过)以及可观察集合中项目属性的问题。当我在我的2个标签之间反复切换时,会发生这种情况,每个标签都带有MvxRecyclerView和连接在一起的项目列表。基本上一个是正常列表,一个是favoritelist。

当片段通过此方法显示以确保所有新数据都显示时,这两个列表都可以通过后台数据准备好:

private void updateChannels()
{
    foreach (var category in CalCategories)
    {
        if (string.IsNullOrEmpty(m_searchString))
        {
            var channels = category.Channels.Where(o => o.Task == null).ToList();
            if (category.Count != channels.Count)
            {
                category.Count = channels.Count;
            }

            if (channels.Count > 0)
            {
                if (!CalChannelList.Contains(category))
                {
                    CalChannelList.Add(category);
                }
                if (category.Expanded)
                {
                    foreach (var channel in channels)
                    {
                        if (!CalChannelList.Contains(channel))
                        {
                            CalChannelList.Add(channel);
                        }
                    }
                }
            }
        }
        else
        {
            var channels = category.Channels.Where(o => o.Name.Contains(SearchString) && o.Task == null).ToList();
            if (category.Count != channels.Count)
            {
                category.Count = channels.Count;
            }
            if (channels.Count > 0)
            {
                if (!CalChannelList.Contains(category))
                {
                    CalChannelList.Add(category);
                }
                if (category.Expanded)
                {
                    foreach (var channel in channels)
                    {
                        if (!CalChannelList.Contains(channel))
                        {
                            CalChannelList.Add(channel);
                        }
                    }
                }
            }
        }
    }
}

错误发生在一定时间后,只需在选项卡之间切换回来,并且当category.Count设置完成时总是发生在该行。

Stacktrace:

  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) object.wrapper_native_0xb4ecb6f9 (intptr,intptr,intptr,Android.Runtime.JValue*) <IL 0x0002a, 0xffffffff>
  at (wrapper delegate-invoke) <Module>.invoke_void_intptr_intptr_intptr_JValue* (intptr,intptr,intptr,Android.Runtime.JValue*) <IL 0x0007d, 0xffffffff>
  at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android.Runtime.JValue*) [0x00040] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:567
  at Android.Widget.TextView.set_TextFormatted (Java.Lang.ICharSequence) [0x0004b] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.TextView.cs:3237
  at Android.Widget.TextView.set_Text (string) [0x00013] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.TextView.cs:3248
  at MvvmCross.Binding.Droid.Target.MvxTextViewTextTargetBinding.SetValueImpl (object,object) <IL 0x0000c, 0x000ab>
  at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (object) [0x00088] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Target\MvxConvertingTargetBinding.cs:61
  at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (object) [0x00024] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:156
  at MvvmCross.Binding.Bindings.MvxFullBinding.<CreateSourceBinding>b__15_0 (object,System.EventArgs) [0x0000c] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:85
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxPathSourceStep.SourceBindingOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxPathSourceStep.cs:71
  at MvvmCross.Binding.Bindings.Source.MvxSourceBinding.FireChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\MvxSourceBinding.cs:36
  at MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.OnBoundPropertyChanged () [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\Leaf\MvxLeafPropertyInfoSourceBinding.cs:29
  at MvvmCross.Binding.Bindings.Source.MvxPropertyInfoSourceBinding.SourcePropertyChanged (object,System.ComponentModel.PropertyChangedEventArgs) [0x00020] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\MvxPropertyInfoSourceBinding.cs:88
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object_object (object,intptr,intptr,intptr) <IL 0x00062, 0xffffffff>
  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) <IL 0x00034, 0xffffffff>
  at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) [0x00038] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:295
  at System.Reflection.MethodBase.Invoke (object,object[]) [0x00000] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/reflection/methodbase.cs:277
  at MvvmCross.Platform.WeakSubscription.MvxWeakEventSubscription`2<TKey_REF, TValue_REF>.OnSourceEvent (object,TValue_REF) [0x0000f] in D:\git\MvvmCross\MvvmCross\Platform\Platform\WeakSubscription\MvxWeakEventSubscription.cs:75
  at (wrapper delegate-invoke) <Module>.invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00074, 0xffffffff>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged/<>c__DisplayClass10_0.<RaisePropertyChanged>b__0 () <IL 0x0001c, 0x000a7>
  at MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action) <IL 0x0001f, 0x00133>
  at MvvmCross.Platform.Core.MvxMainThreadDispatchingObject.InvokeOnMainThread (System.Action) [0x00000] in D:\git\MvvmCross\MvvmCross\Platform\Platform\Core\MvxMainThreadDispatchingObject.cs:18
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged (System.ComponentModel.PropertyChangedEventArgs) <IL 0x00044, 0x00277>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged (string) <IL 0x00009, 0x000b3>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.SetProperty<int> (int&,int,string) <IL 0x00023, 0x00147>
  at XCPCore.Models.BaseCategory.set_Count (int) [0x00001] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\Models\BaseCategory.cs:26
  at XCPCore.ViewModels.Cal.CalFavoritesViewModel.updateChannels () [0x00075] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\ViewModels\Cal\CalFavoritesViewModel.cs:135
  at XCPCore.ViewModels.Cal.CalFavoritesViewModel.Refresh () [0x00001] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\ViewModels\Cal\CalFavoritesViewModel.cs:180
  at MobileXcp.XcpAndroidApp.Fragments.CalFavoritesFragment.set_UserVisibleHint (bool) [0x0000a] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpAndroidApp\Fragments\CalFavoritesFragment.cs:82
  at Android.Support.V4.App.Fragment.n_SetUserVisibleHint_Z (intptr,intptr,bool) <IL 0x0000b, 0x000b7>
  at (wrapper dynamic-method) object.7467b8b6-907d-4849-8505-c72161c45779 (intptr,intptr,bool) <IL 0x00017, 0x00043>
  at (wrapper native-to-managed) object.7467b8b6-907d-4849-8505-c72161c45779 (intptr,intptr,int) <IL 0x0002f, 0xffffffff>

Attempting native Android stacktrace:

 at ???+3035307817 [0x6fe827f8]
 at ???+3035307817 [0xffffffff]

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

Fatal signal 7 (SIGBUS), code 1, fault addr 0x5 in tid 7646 (leXcp.MobileXcp)

另一个堆栈跟踪是在更改SearchView时发生的,因此也就是整个列表:

Stacktrace:

  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) object.wrapper_native_0xb4ecb6f9 (intptr,intptr,intptr,Android.Runtime.JValue*) <IL 0x0002a, 0xffffffff>
  at (wrapper delegate-invoke) <Module>.invoke_void_intptr_intptr_intptr_JValue* (intptr,intptr,intptr,Android.Runtime.JValue*) <IL 0x0007d, 0xffffffff>
  at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android.Runtime.JValue*) [0x00040] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:567
  at Android.Widget.TextView.set_TextFormatted (Java.Lang.ICharSequence) [0x0004b] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.TextView.cs:3237
  at Android.Widget.TextView.set_Text (string) [0x00013] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.TextView.cs:3248
  at MvvmCross.Binding.Droid.Target.MvxTextViewTextTargetBinding.SetValueImpl (object,object) <IL 0x0000c, 0x000ab>
  at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (object) [0x00088] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Target\MvxConvertingTargetBinding.cs:61
  at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (object) [0x00024] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:156
  at MvvmCross.Binding.Bindings.MvxFullBinding.<CreateSourceBinding>b__15_0 (object,System.EventArgs) [0x0000c] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:85
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxCombinerSourceStep.SubStepOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxCombinerSourceStep.cs:107
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SendSourcePropertyChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:119
  at MvvmCross.Binding.Bindings.SourceSteps.MvxPathSourceStep.SourceBindingOnChanged (object,System.EventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxPathSourceStep.cs:71
  at MvvmCross.Binding.Bindings.Source.MvxSourceBinding.FireChanged () [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\MvxSourceBinding.cs:36
  at MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.OnBoundPropertyChanged () [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\Leaf\MvxLeafPropertyInfoSourceBinding.cs:29
  at MvvmCross.Binding.Bindings.Source.MvxPropertyInfoSourceBinding.SourcePropertyChanged (object,System.ComponentModel.PropertyChangedEventArgs) [0x00020] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\MvxPropertyInfoSourceBinding.cs:88
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object_object (object,intptr,intptr,intptr) <IL 0x00062, 0xffffffff>
  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) <IL 0x00034, 0xffffffff>
  at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) [0x00038] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:295
  at System.Reflection.MethodBase.Invoke (object,object[]) [0x00000] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/reflection/methodbase.cs:277
  at MvvmCross.Platform.WeakSubscription.MvxWeakEventSubscription`2<TKey_REF, TValue_REF>.OnSourceEvent (object,TValue_REF) [0x0000f] in D:\git\MvvmCross\MvvmCross\Platform\Platform\WeakSubscription\MvxWeakEventSubscription.cs:75
  at (wrapper delegate-invoke) <Module>.invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00074, 0xffffffff>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged/<>c__DisplayClass10_0.<RaisePropertyChanged>b__0 () <IL 0x0001c, 0x000a7>
  at MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action) <IL 0x0001f, 0x00133>
  at MvvmCross.Platform.Core.MvxMainThreadDispatchingObject.InvokeOnMainThread (System.Action) [0x00000] in D:\git\MvvmCross\MvvmCross\Platform\Platform\Core\MvxMainThreadDispatchingObject.cs:18
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged (System.ComponentModel.PropertyChangedEventArgs) <IL 0x00044, 0x00277>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged (string) <IL 0x00009, 0x000b3>
  at MvvmCross.Core.ViewModels.MvxNotifyPropertyChanged.SetProperty<int> (int&,int,string) <IL 0x00023, 0x00147>
  at XCPCore.Models.BaseCategory.set_Count (int) [0x00001] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\Models\BaseCategory.cs:36
  at XCPCore.ViewModels.Meas.ConfigInViewModel.updateChannels () [0x00149] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\ViewModels\Meas\ConfigInViewModel.cs:209
  at XCPCore.ViewModels.Meas.ConfigInViewModel.set_SearchString (string) [0x00043] in w:\DevWA\MobileXCP~BARONDST\MobileXCP\MobileXcp\MobileXcp.XcpCore\ViewModels\Meas\ConfigInViewModel.cs:158
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <IL 0x0005a, 0xffffffff>
  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) <IL 0x00034, 0xffffffff>
  at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) [0x00038] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:295
  at System.Reflection.MonoProperty.SetValue (object,object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) [0x0006a] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/mcs/class/corlib/System.Reflection/MonoProperty.cs:445
  at System.Reflection.PropertyInfo.SetValue (object,object,object[]) [0x00000] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/mcs/class/corlib/System.Reflection/PropertyInfo.cs:111
  at MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.SetValue (object) [0x00060] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Source\Leaf\MvxLeafPropertyInfoSourceBinding.cs:83
  at MvvmCross.Binding.Bindings.SourceSteps.MvxPathSourceStep.SetSourceValue (object) [0x0001b] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxPathSourceStep.cs:85
  at MvvmCross.Binding.Bindings.SourceSteps.MvxSourceStep.SetValue (object) [0x0001a] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\SourceSteps\MvxSourceStep.cs:70
  at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateSourceFromTarget (object) [0x00013] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:179
  at MvvmCross.Binding.Bindings.MvxFullBinding.<CreateTargetBinding>b__18_0 (object,MvvmCross.Binding.Bindings.Target.MvxTargetChangedEventArgs) [0x00000] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\MvxFullBinding.cs:140
  at MvvmCross.Binding.Bindings.Target.MvxTargetBinding.FireValueChanged (object) [0x00006] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Target\MvxTargetBinding.cs:32
  at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.FireValueChanged (object) [0x0003f] in D:\git\MvvmCross\MvvmCross\Core\Binding\Bindings\Target\MvxConvertingTargetBinding.cs:93
  at MvvmCross.Binding.Droid.Target.MvxSearchViewQueryTextTargetBinding.HandleQueryTextChanged (object,Android.Widget.SearchView/QueryTextChangeEventArgs) <IL 0x00019, 0x0014f>
  at Android.Widget.SearchView/IOnQueryTextListenerImplementor.OnQueryTextChange (string) [0x00017] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.SearchView.cs:322
  at Android.Widget.SearchView/IOnQueryTextListenerInvoker.n_OnQueryTextChange_Ljava_lang_String_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.SearchView.cs:207
  at (wrapper dynamic-method) object.bf5df6e6-8c4e-4c9b-b90b-f3b9d377de80 (intptr,intptr,intptr) <IL 0x00017, 0x0004b>
  at (wrapper native-to-managed) object.bf5df6e6-8c4e-4c9b-b90b-f3b9d377de80 (intptr,intptr,intptr) <IL 0x00029, 0xffffffff>

Attempting native Android stacktrace:

 at ???+0 [0x6fe827f8]
 at ???+0 [0x3f7ffffc]

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================
06-02 12:24:13.942 E/mono-rt ( 6344): 

更新

似乎与绑定和更新ui元素有关。也许某种方式,当项目被删除时,元素的引用被清除或者没有完全释放? 没有MvxBindings的Atleast在这个过程中会发生变化而不会崩溃。

更新2

public abstract class BaseCategory : MvxNotifyPropertyChanged, IChannelItem
{
    public bool Expanded { get; set; }

    public int FavoriteCount
    {
        get { return m_iFavoriteCount; }
        set { SetProperty(ref m_iFavoriteCount, value); }
    }

    public int Count
    {
        get
        {
            return m_iCount; 
        }
        set
        {
            SetProperty(ref m_iCount, value);
        }
    }
    public string Name { get; set; }

    protected BaseCategory(string sName)
    {
        Expanded = false;
        Count = 0;
        FavoriteCount = 0;
        Name = sName;
    }

    private int m_iCount;
    private int m_iFavoriteCount;

    public ChannelItemTypes CItemType { get { return ChannelItemTypes.Category; } }

}

选择的布局是我的multititemtemplateselector:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
              xmlns:cardview="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
  <android.support.v7.widget.CardView
             android:foreground="?attr/selectableItemBackground"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    cardview:cardUseCompatPadding="true"
  cardview:cardCornerRadius="2dp"
  cardview:cardElevation="2dp"
  cardview:contentPadding="10dp">
    <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_gravity="center_horizontal"
        android:layout_marginRight="5dp"
        android:padding="10dp"
        android:textColor="@color/white"
        android:textStyle="bold"
        local:MvxBind="Text (Name+' '+Count)" />
    </LinearLayout>
  </android.support.v7.widget.CardView>
</LinearLayout>

更新3 显然,updateChannels()方法创建了越来越多的数据对象。我只是不确定它可能是什么原因?绑定到UI元素,LinQ命令?还是我只是瞎了?

更新4 我现在创建了一个单独的项目,在片段中只有一个MvxRecyclerView和一个ObservableCollection。如果我单击按钮,我会在清除列表后将X个新对象添加到列表中。通过使用DeviceMonitor观察它,对象会不断增加,所以要么我做了一些可怕的错误,要么我使用的组件出了问题。

https://github.com/Noires/MvxRecyclerViewLeakTest

更新5 虽然这是一个问题,但它与原始问题无关。所以目前我只是改变了自己的MVVMCross以防止它,并将在之后检查真正的问题。

更新6 问题已在https://github.com/MvvmCross/MvvmCross/issues/1379

上打开

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,SIGSEGV主要与内存管理问题有关。

RecyclerView的一个优点是您可以添加元素而无需刷新整个列表。这样可以节省大量内存。

updateChannels方法中,您正在清除列表(可能是recyclerView的来源),然后再次读取元素。这是一个非常糟糕的解决方案,特别是对于大型列表。这样整个recyclerView每次更改标签时都会更新,这会严重影响性能。

您应该做的是检查您是否有新数据并且只添加新元素。

为此您可以找到更好的示例,但简单快速的解决方案是newList.Except(recyclerViewSourceList)。这将为您提供来自回收者视图不包含的新来源的元素。 请查看此内容以获取更多详细信息:https://stackoverflow.com/a/3944821/3423468

答案 1 :(得分:0)

目前的问题是,从不同视图模型中的服务重用一个条目池并不能清楚地看到绑定,因为只有条目的引用被清除而不是条目本身。

目前我的解决方案是为每个列表和每个条目添加一个额外的绑定项。因此,如果它被删除,我确保绑定被删除,或者至少使用它,直到GC清理它

仍然希望有更好的解决方案,因为我需要为每个条目添加一个额外的活页夹项目,但有关更多信息,请参阅:

更新:问题(https://github.com/MvvmCross/MvvmCross/issues/1379)已解决。感谢kjeremy的辛勤工作!