ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Activity와 Fregment의 생명주기
    프로그래밍/Android 2017. 6. 2. 14:29

    이번에 다룰 내용은 Activity와 Fregment의 생명주기 입니다.

    안드로이드 개발에 있어서 생명주기는 굉장히 중요합니다.



    Activity의 생명주기

    먼저 Activity의 생명주기에 대해 알아보겠습니다.


    Activity 생명주기



    • onCreate()

    - Activity가 처음 생성될 때 호출됩니다. 매개변수인 savedInstanceState를 통해 이전 상태를 불러오거나, Activity에 필요한 구성 요소들을 초기화하며, UI 레이아웃을 정의하는 구간입니다. 또한 저장되었던 데이터에 의해 화면을 이전상태로 복원하는 역할을 합니다.


    • onRestart()

    - Activity가 중단되었다가 다시 시작되기 전에 호출됩니다.


    • onStart()

    - Activity가 화면에 보이기 바로 직전에 호출됩니다.


    • onResume()

    - Activity가 사용자와 상호작용을 하기 바로 직전에 호출됩니다. 이 단계를 지나면, 실질적으로 우리가 사용 가능한 Activity가 실행 되게 됩니다.


    • onPause()

    - Activity가 다른 Activity로 가려져 화면에서 사라지기 시작할 때 호출됩니다. BroadcastReceiver, 센서(GPS 등과 같은) 리, 활동이 일시중지되어, 사용자가 필요하지 않는 리소스 등을 해제 할 수 있습니다. onPause() 구간은 매우 짧기 때문에, 안드로이드 가이드에서는 응용 프로그램, 사용자의 데이터를 저장 및 네트워크 호출, 데이터베이스의 트랜젝션 처리 등을 수행하지 말라고 가이드 하고 있습니다.


    예를 들어, 앱 사용 도중 전화가 와서 전화를 받고 다시 앱으로 돌아왔을때 Activity는 어떻게 동작할까요?


    Activity 실행 도중 인터럽트(전화 또는 다른 Activity로의 이동과 같은)가 발생 되면, Activity는 onPause()를 호출합니다. 이후, 사용자에 의해 다시 Activity로 돌아오게 되면, onResume()을 호출하여 Activity는 다시 실행 상태가 됩니다.


    개발을 진행하다 보면, onResume()에서 리소스를 초기화 하고, onPause()에서 리소스를 해제해줘야 하는 경우가 많이 발생합니다. onResume()과 onPause()의 상관관계에 대해 잘 기억해두시길 바랍니다.


    • onStop()

    - Activity가 화면에 더 이상 보이지 않을 때. 즉, Activity가 종료되거나, 다른 Activity가 화면을 가릴 졌을 경우 등의 상황에 호출됩니다. 이 구간에서는 Activity Object가 메모리에만 남아있게 됩니다. 이 구간에 진입하게 되면 자동으로 onSaveInstanceState()가 실행되는데요, 여기서 데이터를 Key-value 형태로 값을 저장하여 onCreate()에서 다시 복원을 할 수 있도록 지원하고 있습니다. 데이터만 있다면 화면을 다시 불러올 수 있다는 의미입니다.

      

    • onDestroy()

    - Activity가 완전히 소멸될 때 호출됩니다. 유저가 종료하였을 수도 있고, 시스템에서 메모리 절약을 위해 강제적으로 종료 시켜 진입할 수도 있습니다.



    Fragment의 생명주기

    Fragment는 Activity내에 존재하며 여러개의 Fragment를 Activity에 생성하여 하나의 Activity에 여러개의 화면을 구성할 수 있도록 합니다.

    그럼 이어서 Fragment의 생명주기에 대해 알아보겠습니다.

            

                                      

    Fragment 생명주기



    • onAttach()

    - Fragment가 Activity에 연결될 때 호출됩니다.


    • onCreate()

    - Fragment가 처음 생성될 때 호출됩니다. Activity와 마찬가지로 리소스들을 초기화하며, 생성 시 넘겨받은 값들이 있다면 여기서 변수에 넣어주면 됩니다. 하지면 여기서는 아직 UI에 대한 작업을 할 수 없습니다.


    • onCreateView()

    - Fragment의 layout을 inflate하여 View 객체를 얻을 수 있는 구간입니다. 여기서 View와 관련된 버튼이나 TextView와 같은 구성요소들을 초기화 할 수 있습니다.


    • onActivityCreated()

    Activity에서 Fragment를 모두 생성된 후에 호출됩니다. 여기부터는 UI에 관련된 View를 변경하는 작업이 가능합니다.


    • onStart()

    - Activity와 마찬가지로 Fragment가 화면에 보이기 바로 직전에 호출됩니다.


    • onResume()

    - 마찬가지로, Fragment가 사용자와 상호작용을 하기 바로 직전에 호출됩니다.


    • onPause()

    - Fragment 또는 Activity의 교체등의 이유로 다른 Fragment가 화면을 가리게 되어 기존 Fragment의 화면이 사라지게 되는 시점에서 호출됩니다. 사용자와의 상호작용이 중지되며, 기존 layout은 back stack으로 들어갑니다.


    • onStop()

    - Fragment가 화면에서 더이상 보여지지 않게 되었을 때 호출됩니다. 기능을 완전히 상실함을 의미합니다. Activity와 마찬가지로 데이터가 있다면 아직은 다시 복원이 가능한 상태입니다.


    • onDestroyView()

    - Fragment의 View들의 리소스를 해제되는 구간입니다.


    • onDestroy()

    - Fragment가 완전히 소멸될 때 호출됩니다.


    • onDetach()

    - Fragment가 Activity와 연결이 끊기기 직전에 호출됩니다.





    이렇게 Activity와 Fragment의 생명주기에 대해서 알아봤는데요, 사실 이 부분은 그냥 읽기만 한다고 해서 머리속에 잘 들어오질 않습니다. 차후 개발을 진행하시다보면 자연스레 다시 찾아보게 될 부분이라고 생각됩니다.


    그럼 여기서 이번 포스팅을 마치겠습니다.





Designed by Tistory.