본문 바로가기

Mobile/Android

[Android] 안드로이드 Activity 생명주기(Life Cycle)

안드로이드의 4대 컴포넌트 중 [액티비티, 서비스] 는 생명주기를 가지고 있다.

 

  -  여기에 더해, 액티비티의 하위 요소라고 할 수 있는 Fragment 역시 생명주기를 가지고 있다.

 

생명 주기(Life Cycle)

 

  1.  생명주기의 정의

 

    -  사용자가 앱을 탐색하고, 나가고, 돌아가는 등의 여러 상태 변화에 따라서

 

       앱이 알아차릴 수 있도록 제공해주는 Callback

 

콜백(Call back) 메서드

 

  1.  콜백 메서드의 정의

 

    -  콜백 메서드란, 다른 함수에 인수로 전달되는 함수

 

    -  일종의 이벤트 후에 실행될 것

 

    -  각각의 상태 변화를 알아차릴 수 있도록 하여 상태 변화에 따른 할 일을 자동으로 알려주는 것

 

    -  콜백에 대해 원하는 기능을 구현할 수 있음

 

 

  2.  콜백 메서드의 목적

 

    -  다른 클래스에서 일부 작업이 완료된 경우, 클래스 Sync/Async에 알리는 것

 

    -> 비동기 작업에 유용

 

       Ex) 버튼을 누르거나, 인터넷에서 데이터를 가져온 후 

 

            일부 작업 수행하거나 컨텐츠를 표시하는 작업 수행 시

 

        ->  콜백 기능을 통해 버튼을 누르면 알림을 받을 수 있음 -> 관찰자 디자인 패턴(Observer design pattern)에 사용

 

 

  3.  콜백과 리스너의 차이

 

콜백 리스너
이벤트가 발생하면 -> 특정 메서드를 호출해 알려줌(1개) 이벤트가 발생하면 -> 연결된 리스너(핸들러)들에게 이벤트 전달 (n개)

 

    (1)  리스너(이벤트 리스너) 정의

 

      1)  뷰 클래스 안에 있는 일종의 인터페이스 -> 이 안에 하나의 콜백 메서드 포함

 

        -  리스너가 등록된 뷰가, UI 안의 항목과 사용자의 상호작용으로 인해 Trigger -> 안드로이드 프레임워크 호출

 

        -  이벤트 리스너 인터페이스 안에 포함된 콜백 메서드 : onClick(), onLongClick(), onFocusChange()

 

      ->  콜백은 다른 함수에 인수로 들어갈 수 있는 함수인데, 리스너는 이 콜백을 갖고 있는 인터페이스

 

  4.  일반적인 함수 호출(call)과 콜백(Call back)

 

일반적인 함수 호출(call) 콜백(Call back)
호출자가 -> 피호출자를 불러 함수 기능 수행 피호출자가 -> 호출을 부름
사용자가 시스템에 임의의 서비스 호출
 - 처리 루틴 = In 시스템
-> 사용자가 해당 루틴을 요청함에 따라 동작 수행
시스템 측에서 이벤트를 발생시켜
-> 이 처리를 수행해달라고 요청
특정 조건이 만족했을 때 지정한 기능 수행하는 경우,
조건을 만족하는지 계혹해서 확인하는 과정 필요
조건을 만족하는지 확인하는 과정 X
-> if 조건 만족 > 기능 호출
-> 효율적 기능 수행, 비동기 작업 수행 가능

 

 

액티비티 생명주기(Activity Life Cycle)

 

  -  Activity 가 시작되고 종료되는 시점까지의 상태

 

  -  onCreate()  ▶️  onStart()  ▶️  onResume()  ▶️  onPause()  ▶️  onStop()  ▶️  onDestroy

 

  -  이때, onRestart() 가 실행될 수 있음

 

Activity 생명주기

 

  1.  Activity 생명주기 메서드

 

    -  안드로이드는, 상태 변화가 있을 때마다 화면에 보이는 액티비티 생명 주기 메서드를 호출해서 상태 변화를 알려줌

 

      Ex) 앱이 실행된 후 다른 액티비티 화면으로 전환되거나, 스마트폰 화면이 꺼지거나, 앱이 종료될 때

 

메서드 액티비티 상태 설명
onCreate 만들어짐 액티비티 생성할 때
onStart 화면에 나타남 화면에 보여지기 시작할 때
onResume 현재 실행중/화면에 나타남 화면에 나타나 있고, 실행중일 때
onPause 화면이 가려짐 액티비티 화면의 일부가 다른 액티비티에 가려질 때
onStop 화면이 없어짐 다른 액티비티의 실행으로 완전히 가려짐
onDestroy 종료됨 액티비티 종료될 때

 

    (1)  onCreate()

 

      1)  최초로 Activity를 실행할 때 처음으로 호출하는 함수

 

      2)  초기화 관련 작업 수행

 

      3)  필수적으로 구현해야 하는 메서드

 

    (2)  onStart

 

      1)  최초로 Activity 실행할 때 onCreate() 다음으로 호출되는 함수

 

      2)  onstop() -> onRestart() 다음으로 호출되는 함수

 

      3)  이 시점부터, 사용자가 액티비티를 볼 수 있음

 

    (3)  onResume()

 

      1)  최초로 Activity 실행할 때, onStart() 다음으로 호출되는 함수

 

      2)  onPause() 다음으로 호출되는 함수이기도 함

 

      3)  이 시점부터는, Activity가 활성화 된 상태(실행중인 상태)로 간주

    

    (4)  onPause()

 

      1)  만약, Resume()가 호출된 이후 다른 Activity 가 최상단에서 보여지는,

 

         즉 Activity가 활성화 된 이후, 다른 Activity에 의해 이전에 활성화 된 Activity가 포커스를 잃은 경우 호출되는 함수

 

      2)  onPause() 가 호출된 이후, 다시 기존 Activity로 돌아오는 경우 onResume() 이 호출

 

      3)  만약, 다른 앱이 메모리를 필요로 할 경우, 앱 프로세스가 종료될 수 있음

 

    (5)  onStop

 

      1)  onResume() 가 호출된 이후, 즉 Activiry가 활성화 된 이후

 

          다른 Activity 가 최상단에 보여지는 경우(포커스를 잃은 경우) + Activity 가 완전히 보여지지 않는 경우 호출되는 함수

 

          즉, onPause() 호출 상태 + Activity 가 완전히 보여지지 않는 경우

 

      2)  onStop() 호출 이후, 즉 다른 Activity가 최상단에 보여지고 -> 다시 기존 Activity 로 돌아오는 경우 onRestart() -> onStart() 호출됨

 

      3)  다른 앱이 메모리를 필요로 할 경우 앱 프로세스 종료 가능

 

    (6)  onDestroy

 

      1)  Activiry가 사용자에 의하거나, 시스템에 의해 완전히 종료되는 경우 호출되는 함수

 

        -  사용자에 의해 종료되는 경우 : onBackPressed() 호출, finish() 등

 

            -  onBackPressed() 호출 시, 기존 실행된 액티비티각 onResume()까지 호출된 후 onDestroy() 호출  

 

        -  시스템에 의해 종료

되는 경우 : 자원 부족 문제 해결(메모리 확보) 위함 

 

      2)  Activiry가 소멸된 때 호출  

 

    (7)  onRestart()

 

      1)  onStop() 이 호출된 이후, 즉 다른 Activity가 최상단에서 보여진 이후에

  

         다시 기존 Activity로 돌아오는 경우 호출되는 함수

 

      2)  onRestart() 호출 이후 -> 이어서 onStart() 호출

 

 

  2.  액티비티 상태에 따른 생명 주기 호출

 

    (1)  액티비티 시작 - 액티비티 생성

 

액티비티 생성

      1)  onCreate() : 생성된 화면 구성요소를 메모리에 로드

 

      2)  onStart() - onResume() : 화면의 구성요소를 나타내고, 사용자와 상호작용 시작

 

        -  onResume() : 실행중인 상태

 

    (2)  액티비티 종료 - 액티비티 화면에서 제거

 

 

      1)  onPause() - onStop() : 뒤로 가기, finish() 실행 시 호출

 

      2)  onDestroy() : 최종적으로 액티비티가 메모리에서 제거되는 상태

 

        -  액티비티 종료 시 메모리에서 해제해야 하는 객체가 있는 경우, onDestroy() 를 오버라이드 해야 함

 

    (3)  액티비티 재개 - 액티비티를 종료하지 않고 다른 액티비티 실행

 

액티비티 재개

      1)  onPause() - onStop() : 현재 액티비티가 종료되지 않고, 백그라운드에서 대기하는 경우 / 새로운 액티비티가 생성될 때

 

      2)  onRestart() - onStart() - onResume() : 이전 액티비티가 다시 실행되는 경우

 

 

Activity 각 생명주기 호출에 따른 로그 출력 및 Toast Message 띄우기

 

 

 

참고

 

  -  https://blog.naver.com/lth9036/221572320853

 

  -  https://stickode.tistory.com/5?category=917924 

 

  -  https://todaycode.tistory.com/25

 

  -  https://velog.io/@nkstar00/Android-%EC%83%9D%EB%AA%85-%EC%A3%BC%EA%B8%B0-Life-Cycle

 

  -  https://velog.io/@eun3673/application-fundamentals-lifecycle

 

  -  https://jhshjs.tistory.com/43

 

  -  https://onlyfor-me-blog.tistory.com/47