로 마트 페이지에서 진행 상황을 표시하는 Xamarin.Forms Android 앱이 있으며 다른 클래스의 일정에 의해 진행률 값이 전송됩니다 .Xamarin.Forms 안드로이드 앱 - 등록되지 않은 상태에서도 PageModel을 유지하는 이벤트 핸들러
우리는 PageModel에서 ViewIsAppearing 및 ViewIsDisappearing 재정의를 사용하는 FreshMvvm을 사용하고 있습니다.
ViewIsAppearing을 구독하고 ViewIsDisappearing에서 탈퇴하는 중입니다. 우리는 PageModel이 삭제되도록 정리 된 PrepareForDispose 메소드도 탈퇴 중입니다.
코드는 다음과 같습니다. 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가 아직 메모리에 볼 수 있다는 것입니다 To Profiler "에서 우리에게이 사실을 알립니다.)
앱을 로그/디버깅 할 때 RemoveEventHandlers이 호출되었음을 알 수 있습니다.
_ProgressManager.ProgressEvent - = ProgressManager_ProgressEvent; _ 처리기를 제거하지 못했거나 EventArgs에서 PageModel에 대한 참조가 여전히있는 다른 이유가 있습니까?
편집 편집 가능성은 Google에서 두 번 이상 구독하지만 구독을 한 번만 취소하는 것일 수 있습니다. 나는 디버그/로깅을 점검했는데 이것이 사실이라고 생각하지 않는다. 우리는 대칭으로 가입/탈퇴 중입니다.