Android Life-Cycle

don9wan·2021년 10월 12일
0

Android

목록 보기
10/18
post-custom-banner

오늘은 Activity의 수명 주기에 대해 알아보겠다. 일단 문서로 가보자.

And.d - The Activity Life-Cycle
Activity 클래스는 활동이 상태 변화(시스템이 활동을 생성, 중단 또는 다시 시작하거나, 활동이 있는 프로세스를 종료하는 등)를 알아차릴 수 있는 여러 콜백을 제공한다고 한다. 따라서 사용자가 활동을 벗어났다가 다시 돌아왔을 때 활동이 작동하는 방식을 수명 주기 콜백 메서드에서 선언할 수 있습니다.

즉, 각 콜백은 상태 변화에 적합한 특정 작업을 실행할 수 있도록 합니다. "적시(액티비티 상태)에 알맞은 작업을 하고 적절하게 전환을 처리하면 앱이 더욱 안정적으로 기능할 수 있습니다." 예를 들어 수명 주기 콜백을 잘 구현하면 앱에서 다음과 같은 문제가 발생하지 않도록 예방하는 데 도움이 될 수 있습니다.

  • 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제
  • 사용자가 앱을 활발하게 사용하지 않는 경우 귀중한 시스템 리소스가 소비되는 문제
  • 사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제
  • 화면이 가로 방향과 세로 방향 간에 회전할 경우, 비정상 종료되거나 사용자의 진행 상태가 저장되지 않는 문제

이 문서에서는 활동 수명 주기에 관해 자세히 설명합니다. 먼저 수명 주기 패러다임에 관해 설명하고 그다음에는 콜백에 관해 설명합니다. 콜백이 실행되는 동안 내부에서 어떤 일이 일어나고, 그 과정에서 무엇을 구현해야 하는지 알려줍니다. 그런 다음 시스템에 의해 종료되는 프로세스의 취약점과 활동 상태 간의 관계에 관해 간략히 소개합니다. 마지막으로, 활동 상태 간 전환에 관한 여러 가지 주제를 다룹니다.

  • 액티비티 수명 주기
  • 콜백
  • 활동 상태 전환

등에 대해 다루려는 것 같다. 액티비티 수명 주기에 대해 알아보자.

Activity Life-Cycle


Activity 클래스는 다음 6가지 콜백으로 구성되어 있다.
onCreate()-onStart()-onResume()-onPause()-onStop()-onDestroy()
활동이 새로운 상태에 들어가면 시스템은 각 콜백을 호출한다. 활동의 복잡도에 따라 모든 (생명 주기의)콜백 메서드를 구현할 필요가 없는 경우도 있다. 하지만 각각의 콜백 메서드를 이해하고, 사용자가 예상한 대로 앱이 동작하도록 필요한 콜백 메서드를 구현하는 것이 중요하다.

Life-Cycle CallBack

onCreate()

1. 호출 시점 create 상태 (Activity 생성 시점, 따라서 구현 필수)
2. 상태 create
3. 작업
전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직 실행

  • 목록에 데이터 바인딩
  • Acitivity와 ViewModel 연결
  • 클래스 인스턴스화
  • savedInstanceState(활동의 이전 저장 상태가 포함된 Bundel 객체) 수신
    • destroy 시점에 onSaveInstanceState(outState : Bundle?)을 사용해 인스턴스를 저장해둘 수 있음
  • setContentView(.xml 파일) 사용
    • setContentView() 대신 활동 코드에 새로운 View 객체를 생성하고 새로운 View를 ViewGroup에 넣어서 뷰 계층 구조를 빌드할 수 있다. 그런 다음 루트 ViewGroup을 setContentView()에 전달하여 그 레이아웃을 사용한다.

4. 상태 완료 onCreate() 콜백 메서드가 실행을 완료하면 해당Activity는 start 상태가 된다. 시스템은 곧이어 onStart() 콜백 메서드를 호출한다.

onStart()

1. 호출 시점 start 상태 (onCreate() 콜백 메서드 실행 완료 직후)
2. 상태 start
3. 작업
Activity가 사용자에게 표시되고, 앱은 Activity를 포그라운드에 보내 상호작용할 수 있도록 준비

  • 앱이 UI 관리하는 코드를 초기화

4. 상태 완료
onStart() 메서드는 매우 빠르게 완료된다. create 상태와 마찬가지로 Activity는 시작됨 상태에 머무르지 않는다. onStart() 콜백 메서드가 완료되면 Activity는 resume 상태가 되고 Activity가 foreGround에 표시된다. 시스템은 곧바로 onResume() 콜백 메서드를 호출한다.

onResume()

1. 호출 시점 resume 상태 (onStart() 콜백 메서드 실행 완료 직후 + pause 상태에서 복귀한 시점)
2. 상태 resume + Activity가 foreGround에 표시되어 있음
3. 작업
포그라운드에서 사용자에게 보이는 동안 실행해야 하는 모든 기능을 활성화
4. 상태 완료
어떤 이벤트가 발생해서 앱에서 포커스가 떠나면 (전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지거나, Dialog(대화상자)등의 이벤트 발생 때문에) Activity는 pause 상태에 들어가고, 시스템은 곧바로 onPause() 콜백 메서드를 호출한다.

onPause()

1. 호출 시점 pause 상태 (resume 상태에서 특정 이벤트 발생 직후)
2. 상태 pause (Activity가 foreground에 있지 않음(android 7.0 이상에서 멀티윈도우 모드의 경우 표시되어 있을 수 있음))

3. 작업
잠시 후 다시 시작할 작업을 일시중지하거나 조정

  • 배터리 수명에 영향을 줄 수 있는 모든 리소스를 해제할 수도 있다.(해당 작업의 경우 onPause()보다 onStop() 사용이 더 적절)
  • 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행해서는 안 된다.(onPause() 실행 시간은 매우 짧아서) 따라서 부하가 큰 작업은 onStop() 상태일 때 실행해야 한다.

4. 상태 완료
Activity가 다시 foreground에 올라오면 Activity는 resume 상태에 들어간다. 시스템은 곧바로 onResume() 콜백 메서드를 호출하고, 인스턴스를 재호출한다.

onStop()

1. 호출 시점

  • Activity의 실행이 완료되어 종료 직전
  • Activity가 foreground에서 완전히 사라진 직후(새로운 Activity가 화면 전체를 차지한 경우)

2. 상태 stop

  • Activity가 foreground에서 완전히 보이지 않는다.
  • Activity 객체는 메모리 안에 머무르게 된다.

3. 작업
Activity가 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지

  • 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 한다.(CPU를 비교적 많이 소모하는 작업 종료 등)
  • 데이터를 DB에 저장할 적절한 시기를 찾지 못했다면 onStop() 콜백 메서드에서 저장하는 것도 가능
  • Activity가 stop상태로 들어갈 때, View 객체의 현재 상태로 기록되기 때문에 이를 저장 및 복원할 필요가 없다.

4. 상태 완료
Activity가 다시 시작되면 Activity는 start 상태로 들어간다. 시스템은 곧바로 restart() 콜백 메서드를 호출한다.

onDestroy()

1. 호출 시점

  • 사용자가 Activity를 완전히 닫거나 Activity에서 finish()가 호출되어 활동이 종료되는 경우
  • 구성 변경(기기 회전 또는 멀티윈도우 모드로 전환)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우

2. 상태 destroy
3. 작업

  • ViewModel 객체를 사용하여 Activity의 관련 View 데이터를 포함해야 한다. 해당 상황 이후 Activity 구성 변경으로 인해 다시 상태가 create로 되고 시스템이 onCreate() 콜백 메서드를 호출하면, ViewModel은 그대로 보존되어 다음 Activity instance에 전달되므로 추가 작업이 필요하지 않게 된다.
  • Activity 종료와 Activity 구성 변경의 시나리오를 구분하기 위해서 isFinishing()이라는 메서드로 구분할 수 있다.

4. 상태 완료
OnDestroy() 콜백 메서드의 실행이 완료된 시점

정리

  • Activity는 하나의 화면이다.
  • Activity는 life-cycle 상태를 가지고 있고, 해당 수명주기는 6가지 콜백으로 구성된다.
  • 6가지 콜백의 콜백 메서드는 다음과 같다.
    • onCreate()
    • onStart()
    • onResume()
    • onPause()
    • onStop()
    • onDestroy()
  • "액티비티 상태"에 따라 알맞은 작업을 하고 적절하게 전환을 처리하면 앱이 더욱 안정적으로 기능할 수 있습니다."

아, 원래는 android context에 대해 글을 작성하려고 했는데, CallBack에 대해 공부를 좀 하고 가야할 것 같다. CallBack, CallBackMethod, Listener? life-cycle을 공부한 뒤 callBack에 대해 예측해보자면, 역으로 알려준다? 호출한다? ㅋㅋ 일단 lifeCycle CallBack은 android O/S system이 알려주는 현재 액티비티의 상태 정보? 그런 느낌인데.. 아! 알아보러 가야겠다.

profile
한 눈에 보기 : https://velog.io/@dongwan999/LIST
post-custom-banner

0개의 댓글