2017-12-11 3 views
1

로 마트 페이지에서 진행 상황을 표시하는 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에서 두 번 이상 구독하지만 구독을 한 번만 취소하는 것일 수 있습니다. 나는 디버그/로깅을 점검했는데 이것이 사실이라고 생각하지 않는다. 우리는 대칭으로 가입/탈퇴 중입니다.

답변

0

우리는 앱 라이프 사이클 시작시 문제의 페이지의 라이프 사이클로 인해 두 번 구독하는 것으로 나타났습니다. 따라서 단일 구독 취소로 인해 구독이 취소되었습니다.

이 문제를 해결하면 문제가 해결됩니다.