앱이 종료될 때에만 데이터를 저장하고 싶어서 terminate 관련된 이벤트를 찾아보았지만, 존재하지 않는다는 것을 알게 되었다.


https://docs.microsoft.com/ko-kr/windows/uwp/launch-resume/app-lifecycle#app-suspend


https://blogs.windows.com/buildingapps/2016/04/28/the-lifecycle-of-a-uwp-app/


결국 아래의 방법은 사용하지 않는 것으로 결정을 했지만, 내용은 남겨둔다.



이유로는 Suspend에서는 최대 5초를 넘기면 안된다는 규정이 있는데, 이것이 종료 단계에 들어가면 정확하게 어느정도로 내려가는지는 모르겠지만 훨씬 줄어든다.

Task를 만들고, Timeout을 5초를 주더라도 파일을 저장하는 작업을 완료할 수 없었다. (대략 1초도 채 되지 않아서 바로 terminate 상태로 들어가는 것 같다)


안정적으로 파일을 저장할 수 없다면 굳이 그 당시에 파일을 저장을 할 필요가 없다고 판단하였기 때문에 관련 데이터가 변경이 되면 즉시 저장을 하는 방식으로 변경을 하였다.

(단점으로는 IO가 너무 빈번한 것이 걸리지만, 확실한 방법을 택하는 것이 낫다고 판단했다)



=======================================================================================

기존 내용

=======================================================================================


아쉽기는 하지만, 그렇다고 방법이 전혀 없는 것은 아니어서 개인적으로는 OnSuspending을 이용하기로 결정했다.

앱이 실행 도중에 OnSuspending에 빠질 수 있다는 점이 조금 걸리기는 했지만, 종료할 때에는 반드시 Suspending 상태를 거쳐서 들어간다는 점을 이용하는 것이다.


        private void OnSuspending(object sender, SuspendingEventArgs e)
        {
            var deferral = e.SuspendingOperation.GetDeferral();

            MainPage.Current.StoreOwnDoll();

            //TODO: 응용 프로그램 상태를 저장하고 백그라운드 작업을 모두 중지합니다.
            deferral.Complete();
        }



이런식으로 메인페이지에서 들고있는 정보를 저장하도록 호출을 하는 방식을 선택했다.

'Programming > C#' 카테고리의 다른 글

[UWP] createfile access denied  (0) 2018.05.17
[UWP] 앱 종료(OnSuspending)  (0) 2018.05.16
[UWP] number textbox  (0) 2018.05.14
[UWP] global::System.Diagnostics.Debugger.Break()  (0) 2018.05.12
[UWP] async await 그리고 동기화  (0) 2018.05.11
[UWP] File Open 관련  (0) 2018.05.08

+ Recent posts