Xamarin.Forms 앱 수명 주기 자습서
이 자습서를 시도하기 전에 다음 작업을 성공적으로 완료해야 합니다.
- 첫 번째 Xamarin.Forms 앱을 빌드하세요 빠른 시작.
- StackLayout 자습서
- 항목 자습서
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- 애플리케이션 시작, 일시 중지 또는 다시 시작에 응답합니다.
- 수명 주기 상태 변경에 걸쳐 데이터를 유지합니다.
Visual Studio 2019 또는 Mac용 Visual Studio를 사용하여 수명 주기 상태 변경 간에 데이터를 유지하는 방법을 보여 주는 간단한 애플리케이션을 만들겠습니다. 다음 스크린샷은 최종 애플리케이션을 보여 줍니다.
수명 주기 상태 변경에 응답
이 자습서를 완료하려면 .NET을 사용한 모바일 개발 워크로드가 설치된 Visual Studio 2019(최신 릴리스)가 있어야 합니다. 또한 iOS에서 자습서 애플리케이션을 빌드하려면 페어링된 Mac이 필요합니다. Xamarin 플랫폼 설치에 대한 자세한 내용은 Xamarin 설치를 참조하세요. Visual Studio 2019를 Mac 빌드 호스트에 연결하는 방법에 대한 자세한 내용은 Xamarin.iOS 개발을 위해 Mac에 페어링을 참조하세요.
Visual Studio를 실행하고 AppLifecycleTutorial이라는 이름의 빈 Xamarin.Forms 앱을 새로 만듭니다.
Important
이 자습서의 C# 및 XAML 코드 조각은 솔루션의 이름이 AppLifecycleTutorial이어야 합니다. 이 자습서에서 코드를 솔루션으로 복사할 때 다른 이름을 사용하면 빌드 오류가 발생합니다.
생성된 .NET Standard 라이브러리에 대한 자세한 내용은 Xamarin.Forms 빠른 시작 심층 분석에서 Xamarin.Forms 애플리케이션 분석을 참조하세요.
솔루션 탐색기의 AppLifecycleTutorial 프로젝트에서 App.xaml을 확장하고 App.xaml.cs를 두 번 클릭하여 엽니다. 그런 다음, App.xaml.cs에서
OnStart
,OnSleep
및OnResume
재정의를 다음과 같이 업데이트합니다.protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
이 코드는 각 메서드가 호출된 시기를 나타내는
Console.WriteLine
문을 사용하여 애플리케이션 수명 주기 메서드 재정의를 업데이트합니다.OnStart
메서드는 애플리케이션이 시작될 때 호출됩니다.OnSleep
메서드는 애플리케이션이 백그라운드로 이동할 때 호출됩니다.OnResume
메서드는 애플리케이션이 백그라운드에서 다시 시작될 때 호출됩니다.
참고 항목
애플리케이션 종료 메서드가 없습니다. 정상적인 상황에서는 애플리케이션 종료가
OnSleep
메서드에서 발생합니다.Visual Studio 도구 모음에서 선택한 원격 iOS 시뮬레이터 또는 Android 에뮬레이터 내에서 애플리케이션을 시작하려면 시작 단추(재생 단추와 비슷한 삼각형 모양의 단추)를 누릅니다. 애플리케이션이 시작되면
OnStart
메서드가 호출되고 OnStart가 Visual Studio 출력 창에 출력됩니다.[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
애플리케이션이 배경으로 설정되면(iOS 또는 Android에서 홈 단추를 눌러서)
OnSleep
메서드가 호출됩니다.[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
그런 다음, 애플리케이션이 백그라운드에서 다시 시작되면(iOS의 애플리케이션 아이콘을 탭하여 Android의 개요 단추를 탭하고 AppLifecycleTutorial 애플리케이션 선택)
OnResume
메서드가 호출됩니다.Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
참고 항목
이러한 코드 블록은 Android에서 애플리케이션을 실행할 때 예제 출력을 보여줍니다.
Visual Studio에서 애플리케이션을 중지합니다.
Xamarin.Forms 앱 수명 주기에 대한 자세한 내용은 Xamarin.Forms 앱 수명 주기를 참조하세요.
수명 주기 상태 변경에서 데이터 유지
Application
서브클래스에는 수명 주기 상태 변경에 따라 데이터를 저장하는 데 사용할 수 있는 정적 Properties
사전이 있습니다. 이 사전은 string
키를 사용하고 object
값을 저장합니다. 사전은 자동으로 디바이스에 저장되며, 애플리케이션을 다시 시작하면 다시 채워집니다.
Important
Properties
사전은 스토리지에 대한 기본 형식만 직렬화할 수 있습니다.
이 연습에서는 백그라운드 시 Entry
에서 텍스트를 유지하도록 애플리케이션을 수정하고, 애플리케이션을 다시 시작할 때 텍스트를 Entry
에 복원합니다.
솔루션 탐색기의 AppLifecycleTutorial 프로젝트에서 App.xaml을 확장하고 App.xaml.cs를 두 번 클릭하여 엽니다. 그런 다음, App.xaml.cs에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.
using System; using Xamarin.Forms; namespace AppLifecycleTutorial { public partial class App : Application { const string displayText = "displayText"; public string DisplayText { get; set; } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { Console.WriteLine("OnStart"); if (Properties.ContainsKey(displayText)) { DisplayText = (string)Properties[displayText]; } } protected override void OnSleep() { Console.WriteLine("OnSleep"); Properties[displayText] = DisplayText; } protected override void OnResume() { Console.WriteLine("OnResume"); } } }
이 코드는
DisplayText
속성과displayText
상수를 정의합니다. 애플리케이션이 백그라운드되거나 종료될 때OnSleep
메서드 재정의는displayText
키에 대해DisplayText
속성 값을Properties
사전에 추가합니다. 그런 다음, 애플리케이션이 시작될 때Properties
사전에displayText
키가 포함되어 있으면 키 값이DisplayText
속성으로 복원됩니다.Important
예기치 않은 오류를 방지하기 위해 액세스하기 전에 항상
Properties
사전에서 키의 존재 여부를 확인하세요.OnResume
메서드 오버로드에서Properties
사전의 데이터를 복원할 필요가 없습니다. 이는 애플리케이션이 백그라운드화되었을 때 애플리케이션과 해당 상태가 여전히 메모리에 있기 때문입니다.솔루션 탐색기의 AppLifecycleTutorial 프로젝트에서 MainPage.xaml을 두 번 클릭하여 엽니다. 그런 다음, MainPage.xaml에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="AppLifecycleTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="entry" Placeholder="Enter text here" Completed="OnEntryCompleted" /> </StackLayout> </ContentPage>
이 코드는
StackLayout
에서Entry
로 구성된 페이지에 대한 사용자 인터페이스를 선언적으로 정의합니다.Entry.Placeholder
속성은Entry
가 처음 표시될 때 표시되는 자리 표시자 텍스트를 지정하고,OnEntryCompleted
라는 이벤트 처리기가Completed
이벤트로 등록됩니다. 또한Entry
에는x:Name
특성으로 지정된 이름이 있습니다. 이렇게 하면 코드 숨김 파일이 할당된 이름을 사용하여Entry
개체에 액세스할 수 있습니다.솔루션 탐색기의 AppLifecycleTutorial 프로젝트에서 MainPage.xaml을 확장하고 MainPage.xaml.cs를 두 번 클릭하여 엽니다. 그런 다음, MainPage.xaml.cs에서
OnAppearing
메서드에 대한 재정의 및OnEntryCompleted
이벤트 처리기를 클래스에 추가합니다.protected override void OnAppearing() { base.OnAppearing(); entry.Text = (Application.Current as App).DisplayText; } void OnEntryCompleted(object sender, EventArgs e) { (Application.Current as App).DisplayText = entry.Text; }
OnAppearing
메서드는App.DisplayText
속성의 값을 검색하여Entry
의Text
속성 값으로 설정합니다.참고 항목
ContentPage
를 레이아웃하고 나서 표시되기 전에OnAppearing
메서드 재정의가 실행됩니다. 따라서 여기서 Xamarin.Forms 보기의 콘텐츠를 설정하는 것이 좋습니다.Entry
에서 텍스트가 확정되면 반환 키를 사용하여OnEntryCompleted
메서드가 실행되고Entry
텍스트가App.DisplayText
속성에 저장됩니다.Visual Studio 도구 모음에서 선택한 원격 iOS 시뮬레이터 또는 Android 에뮬레이터 내에서 애플리케이션을 시작하려면 시작 단추(재생 단추와 비슷한 삼각형 모양의 단추)를 누릅니다.
Entry
에 일부 텍스트를 입력하고 반환 키를 누릅니다. 그런 다음, 홈 단추를 눌러OnSleep
메서드를 호출하여 애플리케이션의 배경을 지정합니다.Visual Studio에서 애플리케이션을 중지했다가 다시 시작하면 이전에
Entry
에 입력한 텍스트가 복원됩니다.Visual Studio에서 애플리케이션을 중지합니다.
속성 사전에 데이터를 유지하는 방법에 대한 자세한 내용은 Xamarin.Forms 앱 클래스 가이드의 속성 사전을 참조하세요.
축하합니다!
축하합니다. 자습서를 마쳤습니다. 여기서는 다음과 같은 방법을 알아보았습니다.
- 애플리케이션 시작, 일시 중지 또는 다시 시작에 응답합니다.
- 수명 주기 상태 변경에 걸쳐 데이터를 유지합니다.
다음 단계
Xamarin.Forms를 사용하여 모바일 애플리케이션을 만드는 기본 사항에 대해 자세히 알아보려면 로컬 데이터베이스 자습서를 계속 진행하세요.
관련 링크
본 섹션과 관련하여 문제가 있으십니까? 문제가 있으시면 본 섹션을 개선하기 위해 피드백을 제출해 주세요.