2016-06-02 6 views
2

iam с использованием MVVMCross 4.1.6 (проверено в 4.1.4) и имеет проблему с свойством элемента в наблюдаемой коллекции. Это происходит, когда я многократно переключаюсь между двумя вкладками, каждый с MvxRecyclerView и списком элементов, которые соединены вместе. В основном это обычный список, а один - фаворитный.MvxNotifyPropertyChanged Application Crash on SetProperty

Оба из этих списков готовьтесь данными в фоновом режиме, когда фрагмент обнаруживается с помощью этого метода, чтобы не уверен, что получает отображаются все новые данные:

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) 

Другой StackTrace, произошло при смене 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): 

Update

, кажется, связаны с креплениями и обновлением элементов пользовательского интерфейса. Может быть, каким-то образом ссылки на элементы будут очищены или не полностью освобождены при удалении элемента? Atleast без MvxBindings, который изменяется во время этого процесса, он не сбой.

Update 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> 

Update 3 Видимо updateChannels() создает все больше и больше данных объектов. Я просто не уверен, что может быть причиной этого? Связывание с пользовательским интерфейсом, команда LinQ? Или я просто слепой?

Update 4 теперь я создал отдельный проект с только MvxRecyclerView и ObservableCollection в фрагменте. Если я нажму кнопку, я добавлю X новых объектов в список после очистки списка. Наблюдая за ним с помощью DeviceMonitor, объекты просто увеличиваются, поэтому либо я делаю что-то ужасно неправильно, либо что-то не так с компонентами, которые я использую.

https://github.com/Noires/MvxRecyclerViewLeakTest

Update 5 Хотя это была проблема, она не была связана с исходной задачи. Поэтому на данный момент я просто изменил сам MVVMCross, чтобы предотвратить его, и потом проверю реальную проблему.

Update 6 Выпуск открыт https://github.com/MvvmCross/MvvmCross/issues/1379

+0

Если я правильно помню, что «SIGSEGV» в основном связан с проблемами управления памятью. Этот метод называется каждый раз, когда фрагмент становится видимым? – arsena

+0

Да, это так. Помимо двух вкладок, я получил диаграмму, которая часто обновляется, а метод, стоящий за ней, пока не оптимизирован. Таким образом, это иногда приводит к небольшим GC_Issues, возможно, это связано вместе? – Cyriac

+0

Может быть. Я постараюсь отправить решение в качестве ответа. – arsena

ответ

0

Проблема на данный момент является то, что повторное использованием пула записей из службы в различных ViewModels оленьей кожи очистить привязки propertly, кажется, так как только ссылки на записи стираются и не сами записи.

Решение для меня на данный момент заключается в добавлении дополнительного элемента привязки для каждого списка и для каждой записи. Поэтому, если он удаляется, я гарантирую, что привязки удаляются, а арент по-прежнему используется до тех пор, пока GC не очистит его до

Все еще надеется на лучшее решение, так как мне нужно для каждой записи добавить дополнительный предмет связующего, но для Дополнительная информация:

Обновление: вопрос (https://github.com/MvvmCross/MvvmCross/issues/1379) был решен. Спасибо kjeremy за тяжелую работу!

1

Как я уже говорил в комментарии, SIGSEGV в основном связано с проблемами управления памятью.

Одним из преимуществ RecyclerView является то, что вы можете добавлять элементы, не обновляя весь список. Это экономит массу памяти.

В способе updateChannels вы очищаете список (предположительно источник recyclerView), а затем снова считываете элементы. Это довольно плохое решение, особенно для больших списков. Таким образом, весь recyclerView обновляется каждый раз, когда вы меняете вкладку, и это может серьезно повредить производительность.

Что вы должны сделать, это проверить, есть ли у вас новые данные и добавлять только новые элементы.

Для этого вы можете найти лучший пример, но простым и быстрым решением является newList.Except(recyclerViewSourceList). Это даст вам элементы из нового источника, которые не отображаются в ресайклере. Проверить это для более подробной информации: https://stackoverflow.com/a/3944821/3423468

+0

Кажется, что действительно не проблема, хотя производительность повысилась. Проблема может заключаться в том, что в обеих моделях отображения одна и та же категория ссылается и число «отображение» изменяется, в зависимости от количества элементов. Обычный вид похож на 6, а любимый вид выглядит как 2, поэтому всегда меняется каждый раз с каждой записью. Atm iam думает просто добавить дополнительное свойство для любимого количества дисплеев, хотя я действительно этого не хочу, но попробую его проверить, разрешит ли он его на данный момент. – Cyriac

+0

@ Cyriac добавила помощь по недвижимости? Я постараюсь подумать о чем-то другом. – arsena

+0

На данный момент кажется, что он еще не дошел до сбоя. – Cyriac

 Смежные вопросы

  • Нет связанных вопросов^_^