2

iam using MVVMCross 4.1.6 (tried on 4.1.4 aswell) and having an issue with a property of an item in a observable collection. It occurs when i repeatedly switch between my 2 tabs each with a MvxRecyclerView and a list of items which are connected together. Basically one is the normal list and one is a favoritelist.

Both of those lists get prepared by the data in the background when the fragment shows up by this method to unsure that all new data gets displayed:

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);
                        }
                    }
                }
            }
        }
    }
}

The error occurs there after a certain amount of time just switching forth and back between the tabs and always happens at the line when the category.Count gets set.

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)

Another stacktrace, happened when changing the SearchView and therefore the whole list:

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

Seems to be related to the bindings and updating the ui elements. Maybe somehow the references for the elements get cleared up or not fully freed when an item gets removed? Atleast without the MvxBindings which gets changed during this process it doesnt crash.

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; } }

}

And the layout which gets selected my a 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 Apparently the updateChannels() method creates more and more data objects. Iam just not sure what might be the cause of it? The Binding to the UI-Element, the LinQ Command? Or am i just blind?

Update 4 I created now a seperate project with just a MvxRecyclerView and a ObservableCollection in a Fragment. If i click the button i add X new objects to the list after clearing the list. By watching it with the DeviceMonitor the objects just keeps increasing, so either i do something horribly wrong or something is wrong with the components i use.

https://github.com/Noires/MvxRecyclerViewLeakTest

Update 5 Though it was an issue, it was not related to the original problem. So at the moment i just changed the MVVMCross myself to prevent it and will check the real issue afterwards.

Update 6 Issue opened on https://github.com/MvvmCross/MvvmCross/issues/1379

Noires
  • 643
  • 8
  • 19
  • If I remember correctly `SIGSEGV` is mostly connected to memory management issues. Is this method called every time fragment becomes visible? – arsena Jun 02 '16 at 07:41
  • Yeah it is. Beside the 2 tabs, i got a chart which updates frequently and the method behind it didnt get optimized yet. So it causes sometimes small GC_Issues, might that be related together? – Noires Jun 02 '16 at 07:45
  • Can be. I'll try to post a solution as answer. – arsena Jun 02 '16 at 07:58
  • Ty, atm iam just "avoiding" it by making sure not to call the Notify to often if the value didnt change, but dont want to let it reappear in a later state of development. – Noires Jun 02 '16 at 08:05
  • Can you post how you have `properties` defined? – arsena Jun 02 '16 at 12:23

2 Answers2

1

As I mentioned in comment, SIGSEGV is mostly connected to memory management issues.

One of the advantages of RecyclerView is that you can add elements without refreshing the whole list. That saves lots of memory.

In updateChannels method you are clearing the list(presumably source of recyclerView) and then readding elements again. That's a pretty bad solution, especially for big lists. That way whole recyclerViewgets updated every time you change tab and it can seriously hurt performance.

What you should do is to check whether you have a new data and only add new elements.

For that you may find a better example but a simple and fast solution is newList.Except(recyclerViewSourceList). That will give you elements from new source that recycler view doesn't contain. Check this for more details: https://stackoverflow.com/a/3944821/3423468

Community
  • 1
  • 1
arsena
  • 1,935
  • 19
  • 36
  • Doesnt seem to really solve the issue, though the performance went up ofc. The problem might be that in both viewmodels the same category gets referenced and the "display" count gets changed, depending how many items are shown. Normal view is like 6 and favorite view is like 2, so always changing forth and back with each tabchange. Atm iam thinking to just add a extra property for the favorite display count, though i dont really prefer that, but will just try it out to see if it solves it for now. – Noires Jun 02 '16 at 08:59
  • @Cyriac did adding a property help? I'll try to think of something else. – arsena Jun 02 '16 at 09:56
  • At the moment it seems like it, didnt get it to crash yet. – Noires Jun 02 '16 at 10:01
0

The problem at the moment is that reusing a pool of entries from a service in different viewmodels doesnt clear the bindings propertly it seems, since only the references of the entries get cleared and not the entries themselves.

The solution for me at the moment is to add an extra binding item, for each list and for each entry. So if it gets removed, i ensure that the bindings get removed aswell or arent atleast used anymore till the GC cleans it up

Still hoping for a better solution, since i kinda need for each entry an additional binder item, but for more information see:

Update: The issue (https://github.com/MvvmCross/MvvmCross/issues/1379) got solved. Thanks to kjeremy for the hard work!

Noires
  • 643
  • 8
  • 19