他のクラスからのイベントによって進捗値が送信される、ロードページで進行状況を表示するXamarin.Forms Androidアプリがあります。Xamarin.Formsアンドロイドアプリ - PageModelが登録解除されているにもかかわらず参照されているPageModelを維持する
PageModelで使用できるViewIsAppearingとViewIsDisappearingオーバーライドを持つFreshMvvmを使用しています。
私たちはViewIsAppearingに登録しており、ViewIsDisappearingで購読を取り消しています.PreleaseForDisposeメソッドは、PageModelがきれいになって処分できるようにするためのものです。
コードは以下のとおりです。 ProgressManagerは、IOCが供給されている
protected override void ViewIsAppearing (object sender, EventArgs e)
{
base.ViewIsAppearing (sender, e);
ProgressManager.ProgressEvent += ProgressManager_ProgressEvent;
}
protected override void ViewIsDisappearing (object sender, EventArgs e)
{
base.ViewIsDisappearing (sender, e);
RemoveEventHandlers();
}
public override void PrepareForDispose()
{
RemoveEventHandlers();
base.PrepareForDispose();
}
private void RemoveEventHandlers()
{
ProgressManager.ProgressEvent -= ProgressManager_ProgressEvent;
}
問題がプロファイラーでオブジェクトを調べるとき、私たちは「パスを調べる(なぜならViewIsAppearingで作成のEventArgsの、LoadingPageModelがメモリに残っている見ることができる、ということですProfilerの "To Root"はこれを私たちに伝えています)。
アプリをログ/デバッグすると、RemoveEventHandlersが呼び出されました。
_ProgressManager.ProgressEvent - = ProgressManager_ProgressEvent; _ハンドラを削除できませんでしたか、またはEventArgsからPageModelへの参照がまだ残っているという別の理由がありますか?
を編集する可能性がありますが、複数回申し込みをしていますが、1度だけ購読を停止している可能性があります。私はデバッグ/ロギングでチェックしましたが、これは当てはまりません。対称的に購読/購読を停止しています。