Xamarin.Forms App 클래스Xamarin.Forms App Class

Application 기본 클래스에서 제공하여 프로젝트의 기본 App 하위 클래스에 공개되는 기능은 다음과 같습니다.The Application base class offers the following features, which are exposed in your projects default App subclass:

  • MainPage 속성 - 앱의 초기 페이지를 설정할 위치입니다.A MainPage property, which is where to set the initial page for the app.
  • 영구 Properties 사전 - 수명 주기 상태 변경 전반에 걸친 단순 값을 저장합니다.A persistent Properties dictionary to store simple values across lifecycle state changes.
  • 정적 Current 속성 - 현재 애플리케이션 개체에 대한 참조를 포함합니다.A static Current property that contains a reference to the current application object.

또한 수명 주기 메서드(예: OnStart, OnSleep, OnResume)와 모달 탐색 이벤트도 제공합니다.It also exposes Lifecycle methods such as OnStart, OnSleep, and OnResume as well as modal navigation events.

선택한 템플릿에 따라 App 클래스는 다음 두 가지 방법 중 하나로 정의할 수 있습니다.Depending on which template you chose, the App class could be defined in one of two ways:

  • C# 또는C#, or
  • XAML 및 C#XAML & C#

XAML을 사용하여 App 클래스를 만들려면 다음 코드 예제와 같이 기본 App 클래스를 XAML App 클래스 및 연결된 코드 숨김으로 바꿔야 합니다.To create an App class using XAML, the default App class must be replaced with a XAML App class and associated code-behind, as shown in the following code example:

<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Photos.App">

</Application>

다음 코드 예제에서는 연결된 코드 숨김을 보여 줍니다.The following code example shows the associated code-behind:

public partial class App : Application
{
    public App ()
    {
        InitializeComponent ();
        MainPage = new HomePage ();
    }
    ...
}

MainPage 속성을 설정할 것뿐만 아니라 코드 숨김에서 InitializeComponent 메서드를 호출하여 연결된 XAML을 로드하고 구문 분석해야 합니다.As well as setting the MainPage property, the code-behind must also call the InitializeComponent method to load and parse the associated XAML.

MainPage 속성MainPage property

Application 클래스의 MainPage 속성은 애플리케이션의 루트 페이지를 설정합니다.The MainPage property on the Application class sets the root page of the application.

예를 들어 사용자가 로그인했는지 여부에 따라 다른 페이지를 표시하는 논리를 App 클래스에 만들 수 있습니다.For example, you can create logic in your App class to display a different page depending on whether the user is logged in or not.

MainPage 속성은 App 생성자에 설정해야 합니다.The MainPage property should be set in the App constructor,

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
    }
}

속성 사전Properties dictionary

Application 하위 클래스에는 데이터를 저장하는 데 사용할 수 있는 정적 Properties 사전이 있으며, 특히 OnStart, OnSleepOnResume 메서드에서 사용할 수 있습니다.The Application subclass has a static Properties dictionary which can be used to store data, in particular for use in the OnStart, OnSleep, and OnResume methods. 이 하위 클래스는 Application.Current.Properties를 사용하여 Xamarin.Forms 코드의 어느 곳에서나 액세스할 수 있습니다.This can be accessed from anywhere in your Xamarin.Forms code using Application.Current.Properties.

Properties 사전은 string 키를 사용하고 object 값을 저장합니다.The Properties dictionary uses a string key and stores an object value.

예를 들어 다음과 같이 코드의 아무 곳에서(항목이 선택된 경우 페이지의 OnDisappearing 메서드 또는 OnSleep 메서드에서) 영구 "id" 속성을 설정할 수 있습니다.For example, you could set a persistent "id" property anywhere in your code (when an item is selected, in a page's OnDisappearing method, or in the OnSleep method) like this:

Application.Current.Properties ["id"] = someClass.ID;

그러면 OnStart 또는 OnResume 메서드에서 이 값을 사용하여 사용자의 환경을 어떤 방식으로든 다시 만들 수 있습니다.In the OnStart or OnResume methods you can then use this value to recreate the user's experience in some way. Properties 사전에는 object가 저장되므로 사용하기 전에 해당 값을 캐스팅해야 합니다.The Properties dictionary stores objects so you need to cast its value before using it.

if (Application.Current.Properties.ContainsKey("id"))
{
    var id = Application.Current.Properties ["id"] as int;
    // do something with id
}

예기치 않은 오류를 방지하기 위해 키에 액세스하기 전에 키가 있는지 항상 확인하세요.Always check for the presence of the key before accessing it to prevent unexpected errors.

참고

Properties 사전은 스토리지에 대한 기본 형식만 직렬화할 수 있습니다.The Properties dictionary can only serialize primitive types for storage. 다른 형식(예: List<string>)을 저장하려고 하면 자동으로 실패할 수 있습니다.Attempting to store other types (such as List<string>) can fail silently.

지속성Persistence

Properties 사전은 자동으로 디바이스에 저장됩니다.The Properties dictionary is saved to the device automatically. 사전에 추가된 데이터는 애플리케이션이 백그라운드에서 반환되거나 다시 시작된 후에도 사용할 수 있습니다.Data added to the dictionary will be available when the application returns from the background or even after it is restarted.

Xamarin.Forms 1.4는 Application 클래스에 SavePropertiesAsync() 추가 메서드를 도입했으며, 이 메서드는 Properties 사전을 사전에 유지하기 위해 호출할 수 있습니다.Xamarin.Forms 1.4 introduced an additional method on the Application class - SavePropertiesAsync() - which can be called to proactively persist the Properties dictionary. 이렇게 하면 중요한 업데이트 후에 충돌로 인해 직렬화되지 않거나 OS에서 종료하는 위험을 감수하지 않으면서 속성을 저장할 수 있습니다.This is to allow you to save properties after important updates rather than risk them not getting serialized out due to a crash or being killed by the OS.

Xamarin.Forms를 사용하여 모바일 애플리케이션 만들기 서적의 6, 1520 장과 관련 샘플에서 Properties 사전 사용에 대한 참조를 찾을 수 있습니다.You can find references to using the Properties dictionary in the Creating Mobile Apps with Xamarin.Forms book chapters 6, 15, and 20, and in the associated samples.

애플리케이션 클래스The Application class

참조에 대한 완전한 Application 클래스 구현은 아래와 같습니다.A complete Application class implementation is shown below for reference:

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
    }

    protected override void OnStart()
    {
        // Handle when your app starts
        Debug.WriteLine ("OnStart");
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
        Debug.WriteLine ("OnSleep");
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
        Debug.WriteLine ("OnResume");
    }
}

그러면 이 클래스가 각 플랫폼별 프로젝트에서 인스턴스화되고, MainPage가 로드되어 사용자에게 표시되는 LoadApplication 메서드로 전달됩니다.This class is then instantiated in each platform-specific project and passed to the LoadApplication method which is where the MainPage is loaded and displayed to the user. 각 플랫폼에 대한 코드는 다음 섹션에서 보여 줍니다.The code for each platform is shown in the following sections. 최신 Xamarin.Forms 솔루션 템플릿에는 이 코드가 모두 포함되어 있으며 애플리케이션에 맞게 미리 구성되어 있습니다.The latest Xamarin.Forms solution templates already contain all this code, preconfigured for your app.

iOS 프로젝트iOS project

iOS AppDelegate 클래스는 FormsApplicationDelegate에서 상속됩니다.The iOS AppDelegate class inherits from FormsApplicationDelegate. 수행하는 작업은 다음과 같습니다.It should:

  • App 클래스의 인스턴스를 사용하여 LoadApplication을 호출합니다.Call LoadApplication with an instance of the App class.

  • 항상 base.FinishedLaunching (app, options);를 반환합니다.Always return base.FinishedLaunching (app, options);.

[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

Android 프로젝트Android project

Android MainActivityFormsAppCompatActivity에서 상속됩니다.The Android MainActivity inherits from FormsAppCompatActivity. OnCreate 재정의에서 LoadApplication 메서드가 App 클래스의 인스턴스를 사용하여 호출됩니다.In the OnCreate override the LoadApplication method is called with an instance of the App class.

[Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true,
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : FormsAppCompatActivity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

Windows 10용 UWP(유니버설 Windows 프로젝트)Universal Windows project (UWP) for Windows 10

UWP 프로젝트의 기본 페이지는 WindowsPage에서 상속됩니다.The main page in the UWP project should inherit from WindowsPage:

<forms:WindowsPage
   ...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
   ...>
</forms:WindowsPage>

C# 코드 숨김 생성은 LoadApplication을 호출하여 Xamarin.Forms App의 인스턴스를 만들어야 합니다.The C# code behind construction must call LoadApplication to create an instance of your Xamarin.Forms App. UWP 애플리케이션에도 Xamarin.Forms와 관련이 없는 자체의 고유한 App 클래스가 있으므로 애플리케이션 네임스페이스를 사용하여 App을 한정하는 것이 좋습니다.Note that it is good practice to explicitly use the application namespace to qualify the App because UWP applications also have their own App class unrelated to Xamarin.Forms.

public sealed partial class MainPage
{
    public MainPage()
    {
        InitializeComponent();

        LoadApplication(new YOUR_NAMESPACE.App());
    }
 }

UWP 프로젝트의 App.xaml.cs에서 Forms.Init()가 호출되어야 합니다.Note that Forms.Init() must be called from App.xaml.cs in the UWP project.

자세한 내용은 UWP를 대상으로 하지 않는 기존 Xamarin.Forms 솔루션에 UWP 프로젝트를 추가하는 단계가 포함된 Windows 프로젝트 설정을 참조하세요.For more information, see Setup Windows Projects, which includes steps to add a UWP project to an existing Xamarin.Forms solution that doesn't target UWP.

Channel 9YouTube에서 더 많은 Xamarin 비디오를 찾습니다.Find more Xamarin videos on Channel 9 and YouTube.