Windows 10 UWP (유니버설 Windows 플랫폼) 앱 수명 주기Windows 10 universal Windows platform (UWP) app lifecycle

이 항목에서는 유니버설 Windows 플랫폼 (UWP) 앱이 시작 될 때부터 닫힐 때 까지의 수명 주기를 설명 합니다.This topic describes the lifecycle of a Universal Windows Platform (UWP) app from the time it is launched until it is closed.

적은 기록A little history

Windows 8 이전에는 앱이 간단한 수명 주기를가지고 있습니다.Before Windows 8, apps had a simple lifecycle. Win32 및 .NET 앱이 실행 되 고 있거나 실행 되 고 있지 않습니다.Win32 and .NET apps are either running or not running. 사용자가이를 최소화 하거나 다른 위치로 전환 하면 계속 실행 됩니다.When a user minimizes them, or switches away from them, they continue to run. 이는 휴대용 장치 및 전원 관리가 점점 더 중요할 때까지 문제가 되지 않습니다.This was fine until portable devices and power management became increasingly important.

Windows 8에는 UWP 앱과 함께 새로운 응용 프로그램 모델이 도입 되었습니다.Windows 8 introduced a new application model with UWP apps. 높은 수준에서 새 일시 중단 됨 상태가 추가 되었습니다.At a high level, a new suspended state was added. 사용자가 최소화 하거나 다른 앱으로 전환 하면 UWP 앱이 즉시 일시 중단 됩니다.A UWP app is suspended shortly after the user minimizes it or switches to another app. 즉, 운영 체제에서 리소스를 회수 해야 할 경우를 제외 하 고 앱의 스레드가 중지 되 고 앱이 메모리에 남아 있습니다.This means that the app's threads are stopped and the app is left in memory unless the operating system needs to reclaim resources. 사용자가 다시 앱으로 전환 하면 실행 중 상태로 신속 하 게 복원할 수 있습니다.When the user switches back to the app, it can be quickly restored to a running state.

백그라운드 작업, 확장 실행및 활동 후원 실행 (예: 앱이 백그라운드에서 미디어를 계속 재생할 수 있도록 허용 하는 BackgroundMediaEnabled 기능)과 같은 백그라운드에 있을 때 응용 프로그램을 계속 실행 해야 하는 다양 한 방법이 있습니다.There are various ways for apps that need to continue to run when they are in the background such as background tasks, extended execution, and activity sponsored execution (for example, the BackgroundMediaEnabled capability which allows an app to continue to play media in the background). 또한 앱이 일시 중단 되거나 심지어 종료 되더라도 백그라운드 전송 작업을 계속할 수 있습니다.Also, background transfer operations can continue even if your app is suspended or even terminated. 자세한 내용은 파일을 다운로드 하는 방법을 참조 하세요.For more info, see How to download a file.

기본적으로 포그라운드에 없는 앱은 일시 중단되므로 전원이 절약되고 현재 포그라운드에 있는 앱에 더 많은 리소스를 사용할 수 있습니다.By default, apps that are not in the foreground are suspended which results in power savings and more resources available for the app currently in the foreground.

일시 중단 된 상태는 리소스를 확보 하기 위해 운영 체제가 일시 중단 된 앱을 종료 하도록 선택할 수 있기 때문에 개발자에 게 새로운 요구 사항을 추가 합니다.The suspended state adds new requirements for you as a developer because the operating system may elect to terminate a suspended app in order to free up resources. 종료 된 앱은 작업 표시줄에 계속 표시 됩니다.The terminated app will still appear in the task bar. 사용자가 앱을 클릭 하면 앱이 종료 되기 전에 있던 상태를 복원 해야 합니다. 사용자는 시스템이 앱을 닫은 것을 인식 하지 못합니다.When the user click on it, the app must restore the state that it was in before it was terminated because the user will not be aware that the system closed the app. 이러한 작업은 다른 작업을 수행 하는 동안 백그라운드에서 대기 중 이었던 것으로 간주 하며, 남은 상태와 동일한 상태가 될 것으로 예상 합니다.They will think that it has been waiting in the background while they were doing other things and will expect it to be in the same state it was in when they left it. 이 항목에서는이를 수행 하는 방법을 살펴보겠습니다.In this topic we will look at how to accomplish that.

Windows 10 버전 1607에는 두 가지 추가 앱 모델 상태 ( 포그라운드로 실행 되백그라운드에서 실행)가 도입 되었습니다.Windows 10, version 1607, introduces two more app model states: Running in foreground and Running in background. 또한 다음 섹션에서 이러한 새 상태를 살펴보겠습니다.We will also look at these new states in the sections that follow.

앱 실행 상태App execution state

이 그림은 Windows 10 버전 1607부터 사용할 수 있는 앱 모델 상태를 나타냅니다.This illustration represents the possible app model states starting in Windows 10, version 1607. UWP 앱의 일반적인 수명 주기를 살펴보겠습니다.Let's walk through the typical lifecycle of a UWP app.

앱 실행 상태 간의 전환을 보여 주는 상태 다이어그램

앱이 시작 되거나 활성화 될 때 백그라운드 상태에서 실행 중인를 입력 합니다.Apps enter the running in background state when they are launched or activated. 포그라운드 앱 시작으로 인해 앱이 포그라운드로 이동 해야 하는 경우 앱은 Leavingbackground 이벤트를 가져옵니다.If the app needs to move into the foreground due to a foreground app launch, the app then gets the LeavingBackground event.

"시작 됨" 및 "활성화 됨"은 비슷한 용어 처럼 보일 수 있지만 운영 체제에서 앱을 시작할 수 있는 다양 한 방법을 참조 합니다.Although "launched" and "activated" may seem like similar terms, they refer to different ways the operating system may start your app. 먼저 앱을 시작 하는 방법을 살펴보겠습니다.Let's first look at launching an app.

앱 시작App launch

Onlaunched 된 메서드는 앱이 시작 될 때 호출 됩니다.The OnLaunched method is called when an app is launched. 응용 프로그램에 전달 되는 인수, 앱을 시작한 타일의 식별자 및 앱이 있었던 이전 상태를 제공 하는 LaunchActivatedEventArgs 매개 변수가 전달 됩니다.It is passed a LaunchActivatedEventArgs parameter which provides, among other things, the arguments passed to the app, the identifier of the tile that launched the app, and the previous state that the app was in.

Applicationexecutionstate를 반환 하는 LaunchActivatedEventArgs에서 앱의 이전 상태를 가져옵니다 .Get the previous state of your app from LaunchActivatedEventArgs.PreviousExecutionState which returns an ApplicationExecutionState. 해당 값 및 해당 상태로 인해 수행할 적절 한 작업은 다음과 같습니다.Its values and the appropriate action to take due to that state are as follows:

ApplicationExecutionStateApplicationExecutionState 설명Explanation 수행할 작업Action to take
실행 중 아님NotRunning 앱은 사용자가 마지막으로 다시 부팅 하거나 로그인 한 이후 실행 되지 않았기 때문에이 상태가 될 수 있습니다.An app could be in this state because it hasn't been launched since the last time the user rebooted or logged in. 또한 실행 중이 고 충돌 하는 경우 또는 사용자가 이전에 닫은 경우에도이 상태가 될 수 있습니다.It can also be in this state if it was running but then crashed, or because the user closed it earlier. 현재 사용자 세션에서를 처음 실행 하는 것 처럼 앱을 초기화 합니다.Initialize the app as if it is running for the first time in the current user session.
일시 중지됨Suspended 사용자가 앱에서 최소화 또는 전환 되 고 몇 초 내에 반환 되지 않았습니다.The user either minimized or switched away from your app and didn't return to it within a few seconds. 앱이 일시 중단 되 면 상태는 메모리에 남아 있습니다.When the app was suspended, its state remained in memory. 앱이 일시 중단 되었을 때 릴리스된 파일 핸들이 나 기타 리소스를 다시 얻어야 합니다.You only need to reacquire any file handles or other resources you released when the app was suspended.
종료됨Terminated 앱이 이전에 일시 중단 되었지만 시스템이 메모리를 회수 하는 데 필요 하기 때문에 특정 시점에 종료 되었습니다.The app was previously suspended but was then shutdown at some point because the system needed to reclaim memory. 사용자가 외부에서 전환할 때 앱이 있었던 상태를 복원 합니다.Restore the state that the app was in when the user switched away from it.
ClosedByUserClosedByUser 사용자가 태블릿 모드에서 닫기 제스처를 사용 하거나 Alt + F4를 사용 하 여 앱을 닫았습니다.The user closed the app with the close gesture in tablet mode, or with Alt+F4. 사용자가 앱을 닫으면 먼저 일시 중단 된 다음 종료 됩니다.When the user closes the app, it is first suspended and then terminated. 기본적으로 앱이 Terminated 상태로 진행하는 동일한 단계를 거쳤기 때문에 Terminated 상태와 동일한 방식으로 처리합니다.Because the app has essentially gone through the same steps that lead to the Terminated state, handle this the same way you would the Terminated state.
실행 중Running 사용자가 앱을 다시 시작 하려고 할 때 앱이 이미 열려 있습니다.The app was already open when the user tried to launch it again. 아무 일도 일어나지 않습니다.Nothing. 앱의 다른 인스턴스가 시작 되지 않습니다.Note that another instance of your app is not launched. 이미 실행 중인 인스턴스는 단순히 활성화 됩니다.The already running instance is simply activated.

참고  현재 사용자 세션 은 Windows 로그온을 기반으로 합니다.Note  Current user session is based on Windows logon. 현재 사용자가 로그 오프 하거나 종료 하거나 Windows를 다시 시작 하지 않은 경우에는 현재 사용자 세션이 잠금 화면 인증, 스위치 사용자 등의 여러 이벤트에서 지속 됩니다.As long as the current user hasn't logged off, shut down, or restarted Windows, the current user session persists across events such as lock screen authentication, switch-user, and so on. 

중요 한 한 가지 중요 한 점은 장치에 충분 한 리소스가 있는 경우 운영 체제에서 응답성을 최적화 하기 위해 해당 동작에 옵트인 한 자주 사용 하는 앱을 사전 설치 하는 것입니다.One important circumstance to be aware of is that if the device has sufficient resources, the operating system will prelaunch frequently used apps that have opted in for that behavior in order to optimize responsiveness. 사전에 시작 된 앱은 백그라운드에서 시작 된 후 신속 하 게 일시 중단 되므로 사용자가 해당 앱으로 전환할 때 앱을 시작 하는 것 보다 더 빠르게 다시 시작할 수 있습니다.Apps that are prelaunched are launched in the background and then quickly suspended so that when the user switches to them, they can be resumed which is faster than launching the app.

사전 실행으로 인해 사용자가 아닌 시스템에서 앱의 onlaunched () 메서드를 시작할 수 있습니다.Because of prelaunch, the app’s OnLaunched() method may be initiated by the system rather than by the user. 앱이 백그라운드에서 사전 실행 되기 때문에 Onlaunched () 에서 다른 작업을 수행 해야 할 수도 있습니다.Because the app is prelaunched in the background you may need to take different action in OnLaunched(). 예를 들어 앱이 시작 될 때 음악의 재생을 시작 하는 경우 앱이 백그라운드에서 사전 실행 되기 때문에 앱이 어디에 있는지 알 수 없습니다.For example, if your app starts playing music when launched, they will not know where it is coming from because the app is prelaunched in the background. 앱이 백그라운드에서 사전 시작 되 면 응용 프로그램을 호출 합니다 . 일시 중단합니다.Once your app is prelaunched in the background, it is followed by a call to Application.Suspending. 그런 다음 사용자가 앱을 시작할 때 다시 시작 하는 이벤트와 onlaunched () 메서드를 호출 합니다.Then, when the user does launch the app, the resuming event is invoked as well as the OnLaunched() method. 사전 처리 시나리오를 처리 하는 방법에 대 한 자세한 내용은 앱 사전 처리 처리 를 참조 하세요.See Handle app prelaunch for additional information about how to handle the prelaunch scenario. 옵트인 (opt in) 된 앱만 사전에 실행 됩니다.Only apps that opt-in are prelaunched.

앱이 시작 되 면 시작 화면이 표시 됩니다.Windows displays a splash screen for the app when it is launched. 시작 화면을 구성 하려면 시작 화면 추가를 참조 하세요.To configure the splash screen, see Adding a splash screen.

시작 화면이 표시 되는 동안 앱에서 이벤트 처리기를 등록 하 고 초기 페이지에 필요한 사용자 지정 UI를 설정 해야 합니다.While the splash screen is displayed, your app should register event handlers and set up any custom UI it needs for the initial page. 응용 프로그램의 생성자 및 onlaunched () 에서 실행 되는 이러한 작업은 몇 초 내에 완료 되거나 시스템에서 앱이 응답 하지 않는 것으로 간주 되 고 종료 될 수 있습니다.See that these tasks running in the application’s constructor and OnLaunched() are completed within a few seconds or the system may think your app is unresponsive and terminate it. 앱이 네트워크에서 데이터를 요청 해야 하거나 디스크에서 많은 양의 데이터를 검색 해야 하는 경우 이러한 작업은 시작 외부에서 완료 해야 합니다.If an app needs to request data from the network or needs to retrieve large amounts of data from disk, these activities should be completed outside of launch. 앱은 장기 실행 작업이 완료 될 때까지 대기 하는 동안 자체 사용자 지정 로드 UI 또는 확장 된 시작 화면을 사용할 수 있습니다.An app can use its own custom loading UI or an extended splash screen while it waits for long running operations to finish. 자세한 내용은 시작 화면 표시시작 화면 샘플 을 참조 하세요.See Display a splash screen for more time and the Splash screen sample for more info.

앱이 시작 되 면 실행 중 상태로 전환 되 고 시작 화면이 사라지고 시작 화면 리소스 및 개체가 모두 지워집니다.After the app completes launching, it enters the Running state and the splash screen disappears and all splash screen resources and objects are cleared.

앱 활성화App activation

사용자가 시작 하는 것과 달리 시스템에서 앱을 활성화할 수 있습니다.In contrast to being launched by the user, an app can be activated by the system. 공유 계약과 같은 계약에 따라 앱을 활성화할 수 있습니다.An app may be activated by a contract such as the share contract. 또는 응용 프로그램에서 처리 하기 위해 등록 된 확장 프로그램을 사용 하 여 사용자 지정 URI 프로토콜 또는 파일을 처리 하도록 활성화할 수 있습니다.Or it may be activated to handle a custom URI protocol or a file with an extension that your app is registered to handle. 앱을 활성화할 수 있는 방법 목록은 ActivationKind를 참조 하세요.For a list of ways your app can be activated, see ActivationKind.

응용 프로그램 을 활성화 하는 다양 한 방법을 처리 하기 위해 재정의할 수 있는 메서드를 정의 합니다.The Windows.UI.Xaml.Application class defines methods you can override to handle the various ways your app may be activated. Onactivated 은 가능한 모든 활성화 형식을 처리할 수 있습니다.OnActivated can handle all possible activation types. 그러나 가장 일반적인 활성화 형식을 처리 하는 데 특정 메서드를 사용 하는 것이 일반적 이며, 일반 정품 인증 형식에 대 한 대체 방법으로 onactivated 을 사용 하는 것이 더 일반적입니다.However, it's more common to use specific methods to handle the most common activation types, and use OnActivated as the fallback method for the less common activation types. 다음은 특정 활성화의 추가 방법입니다.These are the additional methods for specific activations:

OnFileActivated 됨OnFileActivated
OnfileopenOnFileSavePickerActivated ker활성화OnFileSavePickerActivated OnFileOpenPickerActivated OnFileSavePickerActivated
OnSearchActivated 됨OnSearchActivated

이러한 메서드에 대 한 이벤트 데이터에는 위에서 확인 한 것과 동일한 PreviousExecutionState 속성이 포함 되어 있습니다 .이 속성은 앱이 활성화 되기 전에 있었던 상태를 알려 줍니다.The event data for these methods includes the same PreviousExecutionState property that we saw above, which tells you which state your app was in before it was activated. 앱 시작 섹션에서 위에 설명 된 것과 동일한 방식으로 상태를 해석 합니다.Interpret the state and what you should do it the same way as described above in the App launch section.

참고   컴퓨터의 관리자 계정을 사용 하 여 로그온 하는 경우 UWP 앱을 활성화할 수 없습니다.Note If you log on using the computer's Administrator account, you can't activate UWP apps.

백그라운드에서 실행Running in the background

Windows 10, 버전 1607부터 앱은 앱 자체와 동일한 프로세스 내에서 백그라운드 작업을 실행할 수 있습니다.Starting with Windows 10, version 1607, apps can run background tasks within the same process as the app itself. 단일 프로세스 모델을 사용 하 여 백그라운드 작업에서 자세히 알아보세요.Read more about it in Background activity with the Single Process Model. 이 문서에서는 in-process 백그라운드 처리에 영향을 주지 않지만 앱 수명 주기에 영향을 주는 방법은 앱이 백그라운드에 있는 경우와 관련 된 두 개의 새로운 이벤트가 추가 되었다는 것입니다.We won't go into in-process background processing in this article, but how this impacts the app lifecycle is that two new events have been added related to when your app is in the background. 사용자 는 다음을 수행 합니다 . LeavingBackgroundThey are: EnteredBackground and LeavingBackground.

이러한 이벤트는 사용자가 앱의 UI를 볼 수 있는지도 반영 합니다.These events also reflect whether the user can see your app's UI.

백그라운드에서 실행 하는 것은 응용 프로그램이 시작 되거나 활성화 되거나 다시 시작 되는 기본 상태입니다.Running in the background is the default state that an application is launched, activated, or resumed into. 이 상태에서는 응용 프로그램 UI가 아직 표시 되지 않습니다.In this state your application UI is not visible yet.

포그라운드로 실행Running in the foreground

전경에서를 실행 하는 것은 앱의 UI가 표시 됨을 의미 합니다.Running in the foreground means that your app's UI is visible.

Leavingbackground 이벤트는 응용 프로그램 UI가 표시 되기 직전에 실행 되 고를 포그라운드 상태로 들어가기 전에 발생 합니다.The LeavingBackground event is fired just before your application UI is visible and before entering the running in foreground state. 사용자가 앱으로 다시 전환 하는 경우에도 발생 합니다.It also fires when the user switches back to your app.

이전에는 UI 자산을 로드 하는 가장 좋은 위치가 활성화 되거나 다시 시작 된 이벤트 처리기에 있었습니다.Previously, the best location to load UI assets was in the Activated or Resuming event handlers. 이제 Leavingbackground 은 UI가 준비 되었는지 확인 하는 가장 좋은 장소입니다.Now LeavingBackground is the best place to verify that your UI is ready.

응용 프로그램이 사용자에 게 표시 되기 전에 작업을 수행할 수 있는 마지막 기회 이기 때문에 이번에는 시각적 자산이 준비 되었는지 확인 하는 것이 중요 합니다.It is important to check that visual assets are ready by this time because this is the last opportunity to do work before your application is visible to the user. 이 이벤트 처리기의 모든 UI 작업은 사용자가 경험 하는 시작 및 다시 시작 시간에 영향을 주므로 신속 하 게 완료 되어야 합니다.All UI work in this event handler should complete quickly, as it impacts the launch and resume time that the user experiences. Leavingbackground 는 UI의 첫 번째 프레임이 준비 되었는지 확인 하는 시간입니다.LeavingBackground is the time to ensure the first frame of UI is ready. 그런 다음 이벤트 처리기가를 반환할 수 있도록 장기 실행 저장소 또는 네트워크 호출을 비동기식으로 처리 해야 합니다.Then, long-running storage or network calls should be handled asynchronously so that the event handler may return.

사용자가 응용 프로그램에서 외부로 전환할 때 앱은 백그라운드 상태에서 실행을 후 합니다.When the user switches away from your application, your app reenters the running in background state.

배경 상태를Reentering the background state

Enteredbackground 이벤트는 앱이 더 이상 포그라운드에서 표시 되지 않음을 나타냅니다.The EnteredBackground event indicates that your app is no longer visible in the foreground. 바탕 화면 에서 앱이 최소화 되 면이 이벤트가 발생 합니다. 휴대폰에서 홈 화면 또는 다른 앱으로 전환 하는 경우On the desktop EnteredBackground fires when your app is minimized; on phone, when switching to the home screen or another app.

앱의 메모리 사용량을 줄입니다.Reduce your app's memory usage

앱이 더 이상 사용자에 게 표시 되지 않으므로 UI 렌더링 작업 및 애니메이션을 중지 하는 것이 가장 좋은 위치입니다.Since your app is no longer visible to the user, this is the best place to stop UI rendering work and animations. Leavingbackground 를 사용 하 여 해당 작업을 다시 시작할 수 있습니다.You can use LeavingBackground to start that work again.

백그라운드에서 작업을 수행 하려는 경우이 작업을 준비 하는 것이 좋습니다.If you are going to do work in the background, this is the place to prepare for it. AppMemoryUsageLevel를 확인 하 고, 필요한 경우 응용 프로그램이 백그라운드에서 실행 될 때 응용 프로그램에서 사용 되는 메모리의 양을 줄여 응용 프로그램이 리소스를 확보 하기 위해 시스템에 의해 종료 될 위험이 없도록 하는 것이 가장 좋습니다 .It is best to check MemoryManager.AppMemoryUsageLevel and, if needed, reduce the amount of memory being used by your app when it is running in the background so that your app doesn't risk being terminated by the system to free up resources.

자세한 내용은 앱이 백그라운드 상태로 이동할 때 메모리 사용 감소 를 참조 하세요.See Reduce memory usage when your app moves to the background state for more details.

상태 저장Save your state

일시 중단 이벤트 처리기는 앱 상태를 저장 하기에 가장 적합 한 위치입니다.The suspending event handler is the best place to save your app state. 그러나 백그라운드에서 작업을 수행 하는 경우 (예: 확장 된 실행 세션이 나 in-process 백그라운드 작업 을 사용 하 여) 백그라운드에서 데이터를 비동기적으로 저장 하는 것도 좋은 방법입니다.However, if you are doing work in the background (for example, audio playback, using an extended execution session or in-proc background task), it is also a good practice to save your data asynchronously from your EnteredBackground event handler. 앱이 백그라운드에서 낮은 우선 순위로 종료 될 수 있기 때문입니다.This is because it is possible for your app to be terminated while it is at a lower priority in the background. 이 경우에는 앱이 일시 중단 된 상태를 거치지 않기 때문에 데이터가 손실 됩니다.And because the app will not have gone through the suspended state in that case, your data will be lost.

사용자가 응용 프로그램을 포그라운드로 다시 가져올 때 사용자가 응용 프로그램을 다시 시작 하기 전에 사용자가 응용 프로그램을 다시 시작 하기 전에 사용자 가 원하는 대로 데이터를 저장 하는 것이 좋습니다.Saving your data in your EnteredBackground event handler, before background activity begins, ensures a good user experience when the user brings your app back to the foreground. 응용 프로그램 데이터 Api를 사용 하 여 데이터 및 설정을 저장할 수 있습니다.You can use the application data APIs to save data and settings. 자세한 내용은 설정 및 기타 앱 데이터 저장 및 검색을 참조 하세요.For more info, see Store and retrieve settings and other app data.

데이터를 저장 한 후 메모리 사용 제한을 초과 하는 경우 나중에 다시 로드할 수 있으므로 메모리에서 데이터를 해제할 수 있습니다.After you save your data, if you are over your memory usage limit, then you can release your data from memory since you can reload it later. 그러면 백그라운드 작업에 필요한 자산에서 사용할 수 있는 메모리가 확보 됩니다.That will free memory that can be used by the assets needed for background activity.

앱이 백그라운드 작업을 진행 중인 경우 백그라운드 상태에서 실행 중인에서 일시 중단 된 상태에 도달 하지 않고 포그라운드 상태에서 실행 중인로 이동할 수 있습니다.Be aware that if your app has background activity in progress that it can move from the running in the background state to the running in the foreground state without ever reaching the suspended state.

비동기 작업 및 지연과Asynchronous work and Deferrals

처리기 내에서 비동기 호출을 수행 하는 경우 해당 비동기 호출에서 제어가 즉시 반환 됩니다.If you make an asynchronous call within your handler, control returns immediately from that asynchronous call. 즉, 실행은 이벤트 처리기에서 반환 될 수 있으며 비동기 호출이 아직 완료 되지 않은 경우에도 앱이 다음 상태로 이동 됩니다.That means that execution can then return from your event handler and your app will move to the next state even though the asynchronous call hasn't completed yet. 반환 된 GetDeferral 개체에서 Complete 메서드를 호출할 때까지 일시 중단을 지연 시키려면 이벤트 처리기에 전달 되는 EnteredBackgroundEventArgs 개체의 메서드를 사용 합니다.Use the GetDeferral method on the EnteredBackgroundEventArgs object that is passed to your event handler to delay suspension until after you call the Complete method on the returned Windows.Foundation.Deferral object.

지연이 발생 하면 앱이 종료 되기 전에 코드를 실행 해야 하는 양이 증가 하지 않습니다.A deferral doesn't increase the amount you have to run your code before your app is terminated. 이는 지연의 Complete 메서드를 호출하거나 최종 기한에 도달할 때까지 종료를 지연 합니다.It only delays termination until either the deferral's Complete method is called, or the deadline passes-whichever comes first.

상태를 저장 하는 데 시간이 더 필요한 경우 앱이 백그라운드 상태를 들어가기 전에 상태를 저장 하는 방법을 조사 하 여 사용자의 배경 이벤트 처리기에 저장 하는 것이 더 떨어질 수 있습니다.If you need more time to save your state, investigate ways to save your state in stages before your app enters the background state so that there is less to save in your EnteredBackground event handler. 또는 ExtendedExecutionSession 를 요청 하 여 더 많은 시간을 얻을 수 있습니다.Or you may request an ExtendedExecutionSession to get more time. 그러나 요청을 부여 하는 것은 보장 되지 않으므로 상태를 저장 하는 데 필요한 시간을 최소화 하는 방법을 찾는 것이 가장 좋습니다.There is no guarantee that the request will be granted, however, so it is best to find ways to minimize the amount of time you need to save your state.

앱 일시 중단App suspend

사용자가 앱을 최소화 하면 몇 초 후에 사용자가 다시 전환 하는지 확인 합니다.When the user minimizes an app Windows waits a few seconds to see whether the user will switch back to it. 이 기간 내에 다시 전환 되지 않고 확장 된 실행, 백그라운드 작업 또는 활동으로 후원 된 실행이 활성화 되어 있지 않으면 Windows에서 앱을 일시 중단 합니다.If they do not switch back within this time window, and no extended execution, background task, or activity sponsored execution is active, Windows suspends the app. 응용 프로그램은 해당 앱에서 확장 된 실행 세션 등이 활성화 되어 있지 않은 경우 잠금 화면이 표시 되는 경우에도 일시 중단 됩니다.An app is also suspended when the lock screen appears as long as no extended execution session, etc. is active in that app.

앱이 일시 중단 되 면 응용 프로그램을 호출 합니다. 이벤트를 일시 중단 합니다.When an app is suspended, it invokes the Application.Suspending event. Visual Studio의 UWP 프로젝트 템플릿은 App.xaml.cs에서 onsuspending 중단 이라는이 이벤트에 대 한 처리기를 제공 합니다.Visual Studio’s UWP project templates provide a handler for this event called OnSuspending in App.xaml.cs. Windows 10, 버전 1607 이전에는 여기에 상태를 저장 하는 코드를 저장 합니다.Prior to Windows 10, version 1607, you would put the code to save your state here. 이제 위에서 설명한 대로 배경 상태를 입력할 때 상태를 저장 하는 것이 좋습니다.Now the recommendation is to save your state when you enter the background state, as described above.

앱이 일시 중단 된 상태에서 다른 앱이 액세스할 수 있도록 배타 리소스 및 파일 핸들을 해제 해야 합니다.You should release exclusive resources and file handles so that other apps can access them while your app is suspended. 전용 리소스의 예로는 카메라, i/o 장치, 외부 장치 및 네트워크 리소스가 있습니다.Examples of exclusive resources include cameras, I/O devices, external devices, and network resources. 배타적 리소스 및 파일 핸들을 명시적으로 해제 하면 앱이 일시 중단 된 동안 다른 앱에서 해당 리소스에 액세스할 수 있습니다.Explicitly releasing exclusive resources and file handles helps to ensure that other apps can access them while your app is suspended. 앱이 다시 시작 되 면 단독 리소스 및 파일 핸들을 다시 가져와야 합니다.When the app is resumed, it should reacquire its exclusive resources and file handles.

최종 기한 파악Be aware of the deadline

신속 하 고 응답성이 뛰어난 장치를 보장 하기 위해 일시 중단 이벤트 처리기에서 코드를 실행 하는 데 필요한 시간에 제한이 있습니다.In order to ensure a fast and responsive device, there is a limit for the amount of time you have to run your code in your suspending event handler. 각 장치 마다 다르며 최종 기한 이라는 SuspendingOperation 개체의 속성을 사용 하는 것을 확인할 수 있습니다.It is different for each device, and you can find out what it is using a property of the SuspendingOperation object called the deadline.

사용자가 처리기에서 비동기 호출을 수행 하는 경우에는 사용자 지정 Edbackground 이벤트 처리기와 마찬가지로 해당 비동기 호출에서 제어가 즉시 반환 됩니다.As with the EnteredBackground event handler, if you make an asynchronous call from your handler, control returns immediately from that asynchronous call. 즉, 실행은 이벤트 처리기에서 반환 될 수 있으며 비동기 호출이 아직 완료 되지 않은 경우에도 앱은 일시 중단 상태로 전환 됩니다.That means that execution can then return from your event handler and your app will move to the suspend state even though the asynchronous call hasn't completed yet. 반환 된 SuspendingDeferral 개체에서 Complete 메서드를 호출할 때까지 SuspendingOperation 개체 (이벤트 인수를 통해 사용 가능)에서 GetDeferral 메서드를 사용 하 여 일시 중단 된 상태를 지연 시킬 수 있습니다.Use the GetDeferral method on the SuspendingOperation object (available via the event args) to delay entering the suspended state until after you call the Complete method on the returned SuspendingDeferral object.

시간이 더 필요한 경우 ExtendedExecutionSession를 요청할 수 있습니다.If you need more time, you may request an ExtendedExecutionSession. 그러나 요청을 부여 하는 것은 보장 되지 않으므로 일시 중단 된 이벤트 처리기에서 필요한 시간을 최소화 하는 방법을 찾는 것이 가장 좋습니다.There is no guarantee that the request will be granted, however, so it is best to find ways to minimize the amount of time you need in your Suspended event handler.

앱 종료App terminate

시스템은 일시 중단 된 상태에서 앱과 해당 데이터를 메모리에 유지 하려고 합니다.The system attempts to keep your app and its data in memory while it's suspended. 그러나 시스템에 앱을 메모리에 보관 하는 리소스가 없으면 앱이 종료 됩니다.However, if the system does not have the resources to keep your app in memory, it will terminate your app. 앱은 종료 되었다는 알림을 받지 않으므로 앱의 데이터를 저장 하는 유일한 기회는 Onsuspension 중단 이벤트 처리기에 있거나, 사용자의 사용자의 백그라운드 처리기에서 비동기적으로 저장 하는 것입니다.Apps don't receive a notification that they are being terminated, so the only opportunity you have to save your app's data is in your OnSuspension event handler, or asynchronously from your EnteredBackground handler.

앱이 종료 된 후에 활성화 된 것으로 확인 되 면 앱이 종료 되기 전에 있던 응용 프로그램 데이터를 로드 해야 합니다.When your app determines that it has been activated after being terminated, it should load the application data that it saved so that the app is in the same state it was in before it was terminated. 사용자가 종료 된 일시 중단 된 앱으로 다시 전환 되 면 앱은 해당 응용 프로그램 데이터를 해당 Onlaunched 된 메서드로 복원 해야 합니다.When the user switches back to a suspended app that has been terminated, the app should restore its application data in its OnLaunched method. 시스템이 종료 될 때 앱에 알리지 않으므로 앱이 일시 중단 되기 전에 응용 프로그램 데이터를 저장 하 고 전용 리소스 및 파일 핸들을 해제 한 후 앱이 종료 된 후에 활성화 될 때이를 복원 해야 합니다.The system doesn't notify an app when it is terminated, so your app must save its application data and release exclusive resources and file handles before it is suspended, and restore them when the app is activated after termination.

Visual Studio를 사용한 디버깅에 대 한 참고 사항: Visual Studio는 Windows에서 디버거에 연결 된 앱을 일시 중단 하지 못하도록 합니다.A note about debugging using Visual Studio: Visual Studio prevents Windows from suspending an app that is attached to the debugger. 이는 앱이 실행 되는 동안 사용자가 Visual Studio 디버그 UI를 볼 수 있도록 하기 위한 것입니다.This is to allow the user to view the Visual Studio debug UI while the app is running. 앱을 디버깅 하는 경우 Visual Studio를 사용 하 여 일시 중단 이벤트를 보낼 수 있습니다.When you're debugging an app, you can send it a suspend event using Visual Studio. 디버그 위치 도구 모음이 표시 되는지 확인 하 고 일시 중지 아이콘을 클릭 합니다.Make sure the Debug Location toolbar is being shown, then click the Suspend icon.

앱 다시 시작App resume

일시 중단 된 앱은 사용자가 전환 될 때 또는 장치가 전원이 부족 한 상태에서 들어오는 앱 인 경우 다시 시작 됩니다.A suspended app is resumed when the user switches to it or when it is the active app when the device comes out of a low power state.

일시 중단 된 상태에서 앱이 다시 시작 되 면 백그라운드 상태에서 실행 중 으로 전환 되 고 시스템은 사용자에 게 표시 되도록 앱을 복원 합니다.When an app is resumed from the Suspended state, it enters the Running in background state and the system restores the app where it left off so that it appears to the user as if it has been running all along. 메모리에 저장 된 앱 데이터가 손실 되지 않습니다.No app data stored in memory is lost. 따라서 대부분의 앱은 일시 중단 될 때 릴리스된 파일 또는 장치 핸들을 다시 가져와야 하지만 앱이 일시 중단 될 때 명시적으로 릴리스된 모든 상태를 복원 해야 하는 경우 다시 시작 될 때 상태를 복원할 필요가 없습니다.Therefore, most apps don't need to restore state when they are resumed though they should reacquire any file or device handles that they released when they were suspended, and restore any state that was explicitly released when the app was suspended.

앱이 몇 시간 또는 며칠 동안 일시 중단 될 수 있습니다.You app may be suspended for hours or days. 앱이 오래 된 상태로 있을 수 있는 콘텐츠 또는 네트워크 연결을 포함 하는 경우 앱을 다시 시작할 때 새로 고쳐야 합니다.If your app has content or network connections that may have gone stale, these should be refreshed when the app resumes. 앱이 응용 프로그램 에 대 한 이벤트 처리기를 등록 한 경우 이벤트를 다시 시작 하면 일시 중단 된 상태에서 앱이 다시 시작 될 때 호출 됩니다.If an app registered an event handler for the Application.Resuming event, it is called when the app is resumed from the Suspended state. 이 이벤트 처리기에서 앱 콘텐츠 및 데이터를 새로 고칠 수 있습니다.You can refresh your app content and data in this event handler.

일시 중단 된 앱이 앱 계약 또는 확장에 참여 하도록 활성화 된 경우 다시 시작 이벤트를 먼저 받은 다음 활성화 된 이벤트를 수신 합니다.If a suspended app is activated to participate in an app contract or extension, it receives the Resuming event first, then the Activated event.

일시 중단 된 앱이 종료 된 경우 다시 시작 이벤트가 없으며 대신 Applicationexecutionstate종료된 상태에서 onlaunched () 이 호출 됩니다.If the suspended app was terminated, there is no Resuming event and instead OnLaunched() is called with an ApplicationExecutionState of Terminated. 앱이 일시 중단 되었을 때 상태를 저장 했으므로 onlaunched () 중에 해당 상태를 복원 하 여 앱이 사용자에 게 표시 되지 않는 것 처럼 사용자에 게 표시 되도록 할 수 있습니다.Because you saved your state when the app was suspended, you can restore that state during OnLaunched() so that your app appears to the user as it was when they switched away from it.

앱은 일시 중단 되지만 수신 하도록 등록 된 네트워크 이벤트는 수신 되지 않습니다.While an app is suspended, it does not receive any network events that it registered to receive. 이러한 네트워크 이벤트는 큐에 저장 되지 않으며 단순히 누락 됩니다.These network events are not queued--they are simply missed. 따라서 앱이 다시 시작 될 때 네트워크 상태를 테스트 해야 합니다.Therefore, your app should test the network status when it is resumed.

참고    다시 시작 이벤트는 ui 스레드에서 발생 하지 않기 때문에 resume 처리기의 코드가 ui와 통신할 경우 디스패처를 사용 해야 합니다.Note  Because the Resuming event is not raised from the UI thread, a dispatcher must be used if the code in your resume handler communicates with your UI. 이 작업을 수행 하는 방법에 대 한 코드 예제는 백그라운드 스레드에서 UI 스레드 업데이트 를 참조 하세요.See Update the UI thread from a background thread for a code example of how to do this.

일반적인 지침은 앱 일시 중단 및 다시 시작에 대 한 지침을 참조 하세요.For general guidelines, see Guidelines for app suspend and resume.

앱 닫기App close

일반적으로 사용자는 앱을 닫을 필요가 없으며,이를 통해 Windows에서 앱을 관리할 수 있습니다.Generally, users don't need to close apps, they can let Windows manage them. 그러나 사용자는 닫기 제스처를 사용 하거나 Alt + F4 키를 누르거나 Windows Phone에서 작업 전환기를 사용 하 여 앱을 닫을 수 있습니다.However, users can choose to close an app using the close gesture or by pressing Alt+F4 or by using the task switcher on Windows Phone.

사용자가 앱을 닫 았 음을 나타내는 이벤트가 없습니다.There is not an event to indicate that the user closed the app. 사용자가 앱을 닫으면 해당 상태를 저장할 수 있는 기회를 제공 하기 위해 먼저 일시 중단 됩니다.When an app is closed by the user, it is first suspended to give you an opportunity to save its state. Windows 8.1 이상에서 사용자가 앱을 닫은 후에는 앱이 화면에서 제거 되 고 목록으로 전환 되지만 명시적으로 종료 되지는 않습니다.In Windows 8.1 and later, after an app has been closed by the user, the app is removed from the screen and switch list but not explicitly terminated.

사용자가 닫은 동작:    응용 프로그램이 Windows에서 닫힐 때가 아닌 다른 작업을 수행 해야 하는 경우에는 활성화 이벤트 처리기를 사용 하 여 앱이 사용자에 의해 종료 되었는지 또는 Windows에서 종료 되었는지 확인할 수 있습니다.Closed-by-user behavior:  If your app needs to do something different when it is closed by the user than when it is closed by Windows, you can use the activation event handler to determine whether the app was terminated by the user or by Windows. Applicationexecutionstate 열거에 대 한 참조에서 closed 사용자종료 된 상태에 대 한 설명을 참조 하세요.See the descriptions of ClosedByUser and Terminated states in the reference for the ApplicationExecutionState enumeration.

반드시 필요한 경우가 아니면 앱을 프로그래밍 방식으로 닫지 않는 것이 좋습니다.We recommend that apps not close themselves programmatically unless absolutely necessary. 예를 들어 앱에서 메모리 누수를 검색 하는 경우 사용자의 개인 데이터에 대 한 보안을 유지 하기 위해 자신을 닫을 수 있습니다.For example, if an app detects a memory leak, it can close itself to ensure the security of the user's personal data.

앱 충돌App crash

시스템 충돌 환경은 최대한 빠르게 수행 하는 작업을 사용자에 게 제공 하도록 설계 되었습니다.The system crash experience is designed to get users back to what they were doing as quickly as possible. 경고 대화 상자 또는 다른 알림은 사용자를 지연 하므로 제공 하면 안 됩니다.You shouldn't provide a warning dialog or other notification because that will delay the user.

앱이 충돌 하거나, 응답을 중지 하거나, 예외를 생성 하는 경우 사용자의 피드백 및 진단 설정에 따라 문제 보고서가 Microsoft에 전송 됩니다.If your app crashes, stops responding, or generates an exception, a problem report is sent to Microsoft per the user's feedback and diagnostics settings. Microsoft는이를 사용 하 여 앱을 향상 시킬 수 있도록 문제 보고서의 일부 오류 데이터를 제공 합니다.Microsoft provides a subset of the error data in the problem report to you so that you can use it to improve your app. 대시보드의 앱 품질 페이지에서이 데이터를 볼 수 있습니다.You'll be able to see this data in your app's Quality page in your Dashboard.

사용자가 충돌 후에 앱을 활성화 하면 해당 활성화 이벤트 처리기는 NotRunningapplicationexecutionstate 값을 수신 하 고 초기 UI와 데이터를 표시 해야 합니다.When the user activates an app after it crashes, its activation event handler receives an ApplicationExecutionState value of NotRunning, and should display its initial UI and data. 충돌이 발생 한 후에는 해당 데이터가 손상 될 수 있으므로 일시 중단 된 상태에서 다시 시작 하는 데 사용한 앱 데이터를 정기적으로 사용 하지 마세요. 앱 일시 중단 및 다시 시작에 대 한 지침을 참조 하세요.After a crash, don't routinely use the app data you would have used for Resuming with Suspended because that data could be corrupt; see Guidelines for app suspend and resume.

앱 제거App removal

사용자가 앱을 삭제 하면 해당 로컬 데이터와 함께 앱이 제거 됩니다.When a user deletes your app, the app is removed, along with all its local data. 앱을 제거 하면 문서 또는 사진 라이브러리와 같은 공통 위치에 저장 된 사용자의 데이터에 영향을 주지 않습니다.Removing an app doesn't affect the user's data that was stored in common locations such as the Documents or Pictures libraries.

앱 수명 주기 및 Visual Studio 프로젝트 템플릿App lifecycle and the Visual Studio project templates

앱 수명 주기와 관련 된 기본 코드는 Visual Studio 프로젝트 템플릿에서 제공 됩니다.The basic code that is relevant to the app lifecycle is provided in the Visual Studio project templates. 기본 앱은 시작 활성화를 처리 하 고, 앱 데이터를 복원할 수 있는 장소를 제공 하 고, 사용자 고유의 코드를 추가 하기 전에도 기본 UI를 표시 합니다.The basic app handles launch activation, provides a place for you to restore your app data, and displays the primary UI even before you've added any of your own code. 자세한 내용은 앱 용 c #, VB 및 c + + 프로젝트 템플릿을 참조 하세요.For more info, see C#, VB, and C++ project templates for apps.

주요 응용 프로그램 수명 주기 ApiKey application lifecycle APIs