Один из моих действий никогда не удаляется, поскольку одно из его подчиненных регистров регистрируется обработчиком событий и никогда не отменяет его регистрацию. Я попытался отменить его в методе Dispose, но его никогда не вызывал.Утечка на пользовательском представлении, загруженном в xaml
Подраздел использует обработчик событий CrossConnectivity, чтобы показать себя, когда сетевое соединение выключено и спрячется, когда соединение снова вставлено.
Это подвыборка ссылается на макет axml, поэтому его экземпляр создается, когда макет раздувается.
Деятельность, которая только загружает раскладку
using Android.App;
using Android.OS;
namespace MyNamespace
{
[Activity(Label = "SimpleActivity")]
public class SimpleActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.SimpleLayout);
}
}
}
Упомянутое расположение
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<MyNamespace.NetworkStateView
android:text="No network"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textViewNetworkState" />
</LinearLayout>
Обычай вид
using System;
using Android.Content;
using Android.Util;
using Android.Views;
using Android.Widget;
using Connectivity.Plugin;
using Connectivity.Plugin.Abstractions;
namespace MyNamespace
{
public class NetworkStateView : TextView
{
public NetworkStateView(Context ctx) : base(ctx)
{
}
public NetworkStateView(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public NetworkStateView(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
protected override void OnFinishInflate()
{
base.OnFinishInflate();
BindConnectivity();
}
void BindConnectivity()
{
CrossConnectivity.Current.ConnectivityChanged += OnConnectivityChanged;
UpdateVisibility();
}
void OnConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
UpdateVisibility();
}
void UpdateVisibility()
{
Visibility = CrossConnectivity.Current.IsConnected ? ViewStates.Gone : ViewStates.Visible;
}
protected override void Dispose(bool disposing)
{
CrossConnectivity.Current.ConnectivityChanged -= OnConnectivityChanged;
base.Dispose(disposing);
}
}
}