티스토리 뷰

반응형

Universal Windows Application Lifecycle: From Activation and Suspension to Background Execution, Multitasking and Extended Execution - Build 2016

https://channel9.msdn.com/Events/Build/2016/B817

 

기본적인 추천할만한 좋은 앱 실행 라이프사이클에 대해 설명하는 세션이다. 앱이 어떻게 액티브 시키고 어떻게 서스펜드가 되는지..또한 백그라운드 실행과 단일 프로세스 실행 모델에 대해 깊게 이야기할 것이다.

 

 

 

1. 어플리케이션 라이프사이클의 기본

 

윈도우 앱은 아래와 같은 라이프사이클을 가지고 있습니다. 과거 exe 실행파일 처럼 한번 실행되고 종료될 때까지 주구 장창 포그라운드 프로세스를 차지하고 있지 않는다.

 

 

1-1. 앱 라이프사이클은 크게 3가지

미실행(Not Running)

실행(Running)

정지(Suspended)

를 가지고 있으며 각 상태가 변경될 때

Activated, Suspending, Resuming, Terminating 작업이 발생한다.

 

 

 

1-2. 일별 앱 사용 패턴

 

앱을 처음 실행하고 사용하다가 사용이 중지되면 Suspending으로 전환되어서 있다가, 다시 사용하면 Resuming이되어서 다시 활성화. 마지막으로 닫기 버튼을 눌러서 종료를 하면 완전 끝..과 같은 사용패턴이 있다..

 

-> 음 이걸 왜 설명하는지 뒤에서 보면 알겠죠..뭔가 연결관계가 있으니 설명하는 듯..

 

 

 

2. 백그라운드 활성화

 

 

2-1. 트리거(Triggers)

 

윈도우에는 23개의 트리거가 존재하고 있다.

 

 

 

2-2. 트리거 이행(Trigger Implementation)

 

트리거를 이용해서 백그라운드 테스크를 사용하는 방법은 다음과 같다.

 

백그라운드 테스크를 하나 만들고, 트리거를 연결하고, 백그라운드 테스크를 등록해 놓는다.

그러면, 트리거가 발생하면 미리 등록해 놓은 백그라운드 테스크와 연결된 작업을 실행하게 된다.

 

 

 

2-3. Task Lifetime

 

일반 백그라운드 테스크는 기본 실행시간이 25초이며, 작업 취소하는데 5초가 소요된다.  

Long-Running 백그라운드 테스크는 ApplicationTrigger, MaintenanceTrigger, DeviceUseTrigger, RfCommConnectionTrigger가 있다.

 

 

2-4. 백그라운드 테스크 프로세스

 

기존 윈도우 8에서 사용하던 백그라운드 작업은 하나의 App Container안에 CoreApplication과 BackgroundTask 2개의 서로다른 프로세스가 동작하는 방식이였다.

 

앞으로 출시될 Single Process Model에서는 하나의 App Container안에 app.exe한개만 존재하고 그 안에 OnLaunched라는 앱 실행 부분과 OnBackgroundActivated라는 백그라운드 작업 실행 부분을 포함하는 하나의 프로세스만 필요로 한다. 이렇게되면 코드 작성과 포그라운드와 백그라운드 작업간에 데이터 교환 작업이 쉬워진다.

 

 

 

2-5. 데모

ContactStoreNotificationTrigger를 싱글프로세스모델에서 사용하기(Single-Process-Model)

 

노란색 테두리 부분이 예전 방식이라면 TaskEntryPoint를 입력해주어야 하겠지만, 그 부분을 막고 등록을 하며, 노티피케이션이 발생하게되면, 빨간색 테두리 부분인 OnBackgroundActivated가 실행이 되면서, 원하는 작업을 수행한다.

 

 

데모에서는 피플 앱에서 친구의 이름을 변경하니 화면에 바로 반영이되고, 앱을 최소화 시킨 후 친구 삭제를 하니 토스트 팝업이 출력되면서, 친구가 삭제된 내용을 확인 할 수 있었다.

-> 확실히 백그라운드 작업이 편리해졌다는 느낌이 든다.

 

 

 

 

3. 멀티테스킹

 

3-1. Activity Sponsored Execution

 

Manifest Entry에

 

<Capabilities>
     <uap3:Capability Name="backgroundMediaPlayback" />
</Capabilities>

 

플레이 버튼이 눌렸을 때

 

var player = new MediaPlayer();
player.Source = MediaSource.CreateFromUri(new Uri("https://contoso.com/song.mp3"));
player.Play();

 

등록도 필요없고, 백그라운드 관리도 필요없다. 이게 끝

-> 으흠..그렇다고하니 나중에 확인을 해봐야 겠네용

 

 

3-2. Running State Extension - 실행 상태 확장

 

실행 상태 확장이 추가됩니다.

앱이 시작 후 Suspended로 상태가 되기 전까지의 상태나 리소스를 일정 시간동안 유지 시키는 기능(?)인듯;;

 

 

데모를 보면 앱을 실행 시킨후 최소를 시키면 일반 앱은 리소스가 바로바로 해지되어서 바닥을 치는데, Extended Execution Session을 이용하면 일정 크기의 리소스는 계속 유지를 시켜주는 것을 볼 수 있습니다.

-> 폰의 경우 앱 실행 후 다른 앱으로 전환되었을 때 이전 앱의 리소스가 완전이 사라져서 복귀 했을 때 다시 로딩하는 시간이 걸리는 것을 방지할 수 있을 듯합니다.

 

 

 

3-3. Suspending State Extension - 서스팬드 상태 확장

 

서스팬드 상태 확장 Suspending이 시작되면서 부터 Suspended가 될 때까지의 시간을 늘려줍니다.

Suspended로 돌아가기 전에 해야할 작업들을 할 시간이 늘어납니다. 최대 10분

 

 

 

4. 리소스 관리

 

4-1. 메모리 사용

 

기본적으로 앱당 사용하는 메모리의 한계가 정해져있는데, 그 메모리의 한계를 벗어나는 경우에는 실행이 종료된다.

그런 문제를 해결하기 위해 메모리 관리자를 사용해야한다.

 

 

 

4-2. Memory Manager

 

메모리 메니저를 사용해서 초과 상태라는 것을 알게되면 바로 필요 없는 리소스를 제거하는 작업을 진행 해야한다.

 

 

반응형
댓글