수색…


소개

안드로이드 응용 프로그램 수명주기는 일반 안드로이드 응용 프로그램과 동일합니다. 라이프 사이클에 관해 이야기 할 때 우리는 애플리케이션 라이프 사이클, 액티비티 라이프 사이클 및 프래그먼트 라이프 사이클에 대해 이야기해야합니다.

아래에서 나는 그것들을 사용하는 좋은 묘사와 방법을 제공하려고 노력할 것이다. 공식 Android 및 Xamarin 문서와 아래의 비고 섹션에서 제공되는 많은 유용한 웹 리소스에서이 설명서를 얻었습니다.

비고

Android 애플리케이션 라이프 사이클에 대한 광범위한 지식에 대한 흥미로운 링크 :

https://developer.android.com/reference/android/app/Activity.html

http://www.vogella.com/tutorials/AndroidLifeCycle/article.html

https://github.com/xxv/android-lifecycle

https://developer.android.com/guide/components/fragments.html

https://developer.xamarin.com/guides/android/platform_features/fragments/part_1_-_creating_a_fragment/

https://developer.android.com/guide/components/activities/activity-lifecycle.html

애플리케이션 라이프 사이클

먼저 Android.Application 클래스를 확장하여 앱 수명주기와 관련된 두 가지 중요한 메소드에 액세스 할 수 있다는 것을 알아야합니다.

  • OnCreate - 응용 프로그램이 시작될 때, 다른 응용 프로그램 개체 (예 : MainActivity)가 만들어지기 전에 호출됩니다.

  • OnTerminate -이 방법은 에뮬레이트 된 프로세스 환경에서 사용됩니다. 그것은 생산 안드로이드 장치에서 결코 호출되지 않을 것인데, 단순히 프로세스를 죽이는 것만으로 프로세스가 제거됩니다; 그렇게 할 때 사용자 코드 (이 콜백 포함)는 실행되지 않습니다. 설명서 : https://developer.android.com/reference/android/app/Application.html#onTerminate ()

Xamarin.Android 응용 프로그램에서 아래와 같이 Application 클래스를 확장 할 수 있습니다. "MyApplication.cs"라는 새 클래스를 프로젝트에 추가하십시오.

[Application]
public class MyApplication : Application
{
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
    }

    public override void OnTerminate()
    {
        base.OnTerminate();
    }
}

위에서 쓴 것처럼 OnCreate 메서드를 사용할 수 있습니다. 예를 들어 여기에서 로컬 데이터베이스를 초기화하거나 몇 가지 추가 구성을 설정할 수 있습니다.

OnConfigurationChanged 또는 OnLowMemory와 같이 재정의 할 수있는 메소드가 더 있습니다.

활동 라이프 사이클

활동 라이프 사이클은 상당히 복잡합니다. 아시다시피 활동은 사용자가 상호 작용을 수행 할 수있는 Android 앱의 단일 페이지입니다.

아래 다이어그램에서 Android 활동 라이프 사이클의 모습을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오.

보시다시피 활동 라이프 사이클의 특정 흐름이 있습니다. 모바일 애플리케이션에는 특정 라이프 사이클 단편을 처리하는 각 Activity 클래스의 메소드가 있습니다.

[Activity(Label = "LifecycleApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Log.Debug("OnCreate", "OnCreate called, Activity components are being created");

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.MainActivity);
    }

    protected override void OnStart()
    {
        Log.Debug("OnStart", "OnStart called, App is Active");
        base.OnStart();
    }

    protected override void OnResume()
    {
        Log.Debug("OnResume", "OnResume called, app is ready to interact with the user");
        base.OnResume();
    }

    protected override void OnPause()
    {
        Log.Debug("OnPause", "OnPause called, App is moving to background");
        base.OnPause();
    }

    protected override void OnStop()
    {
        Log.Debug("OnStop", "OnStop called, App is in the background");
        base.OnStop();
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        Log.Debug("OnDestroy", "OnDestroy called, App is Terminating");
    }
}

공식 Android 설명서에는 다음과 같은 좋은 설명이 있습니다.

  • 활동의 전체 수명은 onCreate (번들)에 대한 첫 번째 호출과 onDestroy ()에 대한 단일 최종 호출 사이에서 발생합니다. 활동은 onCreate ()에서 "전역"상태의 모든 설정을 수행하고 onDestroy ()에서 나머지 모든 자원을 해제합니다. 예를 들어 네트워크에서 데이터를 다운로드하기 위해 백그라운드에서 실행중인 스레드가있는 경우 onCreate ()에서 해당 스레드를 만든 다음 onDestroy ()에서 스레드를 중지 할 수 있습니다.

  • OnStart ()에 대한 호출과 onStop ()에 대한 해당 호출 사이에서 활동의 가시적 수명이 발생합니다. 이 시간 동안 사용자는 전경에 있지 않고 사용자와 상호 작용할 수도 있지만 화면에서 활동을 볼 수 있습니다. 이 두 가지 방법 사이에서 사용자에게 활동을 표시하는 데 필요한 리소스를 유지 관리 할 수 ​​있습니다. 예를 들어, BroadcastReceiver를 onStart ()에 등록하여 UI에 영향을주는 변경 사항을 모니터링하고 사용자가 더 이상 표시하지 않는 경우 onStop ()에서 등록을 취소 할 수 있습니다. onStart () 및 onStop () 메서드는 액티비티가 표시되고 사용자에게 표시되지 않도록 여러 번 호출 할 수 있습니다.

  • onResume () 호출과 onPause ()에 대한 해당 호출 사이에서 활동의 포어 그라운드 수명이 발생합니다. 이 시간 동안 활동은 다른 모든 활동 앞에 있으며 사용자와 상호 작용합니다. 활동은 재개 된 상태와 일시 중지 된 상태 사이에서 자주 갈 수 있습니다 (예 : 장치가 절전 모드로 전환 될 때, 활동 결과가 전달 될 때, 새로운 의도가 전달 될 때). 따라서이 메소드의 코드는 상당히 가볍습니다.

단편 수명주기

아시다시피 당신은 하나의 활동을 가질 수 있지만 그것에 포함 된 다른 단편은 가질 수 있습니다. 이것이 프래그먼트 수명주기가 개발자에게 중요한 이유입니다.

아래 다이어그램에서 Android 조각 수명주기가 어떻게 표시되는지 확인할 수 있습니다.

여기에 이미지 설명을 입력하십시오.

Android 공식 설명서에 설명 된대로 최소한 다음 세 가지 메소드를 구현해야합니다.

  • OnCreate - 조각을 만들 때 시스템에서이를 호출합니다. 구현 내에서 프래그먼트가 일시 중지되거나 중지 된 다음 다시 시작될 때 유지하려는 프래그먼트의 필수 구성 요소를 초기화해야합니다.

  • OnCreateView - 조각이 처음으로 사용자 인터페이스를 그릴 때 시스템이이를 호출합니다. 조각의 UI를 그리려면 조각의 레이아웃 루트 인이 메서드에서보기를 반환해야합니다. 프래그먼트가 UI를 제공하지 않으면 null을 반환 할 수 있습니다.

  • OnPause - 시스템은 사용자가 조각을 떠날 것이라는 첫 번째 표시로이 메서드를 호출합니다 (항상 조각이 삭제되는 것은 아니지만). 이것은 대개 사용자가 돌아 오지 않을 수도 있기 때문에 현재 사용자 세션 이상으로 유지되어야하는 변경 사항을 커밋해야하는 곳입니다.

다음은 Xamarin.Android의 샘플 구현입니다.

public class MainFragment : Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
        // You should initialize essential components of the fragment
        // that you want to retain when the fragment is paused or stopped, then resumed.
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // The system calls this when it's time for the fragment to draw its user interface for the first time.

        var mainView = inflater.Inflate(Resource.Layout.MainFragment, container, false);
        return mainView;
    }

    public override void OnPause()
    {
        // The system calls this method as the first indication that the user is leaving the fragment 

        base.OnPause();
    }
}

물론 다른 상태를 처리하려는 경우 여기에 메서드를 추가 할 수 있습니다.

GitHub의 전체 샘플

아래에 설명 된 방법으로 기본 프로젝트를 얻으려면 내 GitHub에서 Xamarin.Android 응용 프로그램 템플릿을 다운로드 할 수 있습니다. 다음에 대한 예제를 찾을 수 있습니다.

  • 애플리케이션 라이프 사이클 메소드
  • 활동 라이프 사이클 메소드
  • 조각 라이프 사이클 메소드

https://github.com/Daniel-Krzyczkowski/XamarinAndroid/tree/master/AndroidLifecycle/LifecycleApp



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow