APP/안드로이드프로그래밍

안드로이드 - LifeCycle 정리

헬로월드! 2021. 1. 28. 20:08

PC 로는 여러가지 화면을 띄우고 병렬적인 동시작업이 가능하다.

하지만 스마트폰에서는 여러 앱을 실행하는 것은 가능하지만 여러 앱의 화면을 띄우는 것은 불가능하다.

실제 카톡을 하다가 전화가 오면 전화 앱으로 대체되는 현상을 볼 수 있다.

LifeCycle 은 왜 필요한 것일까❓

 

 

 

이 메서드들은 override 되어 사용된다.

( override 란? 한마디로 재정의 자식 클래스가 부모클래스의 기본적인 동작을 변경하는 것이다. )

예를 들어, 메인 액티비티에서 동영상을 실행하고 있다면 서브 액티비티로 화면 전환된다면

메인 액티비티에 onPause() 또는 onStop() 메서드 안에 동영상을 정지시키는 코드를 작성해둬야한다.

그렇지 않으면 그만큼 자원 ( 배터리, 네트워크 트래픽 등) 이 낭비된다.

각각의 메서드는 상태 변화에 따라 안드로이드가 호출하므로 activity.onStop() 의 형태로 직접 호출해서는 안된다!

 

  • onCreate() - 언제호출❓ Activity 가 처음 만들어졌을 때 호출 최초 한 번 실행

    ✨ setContentView() 를 호출해야 레이아웃을 볼 수 있다.
  • onStart() - 언제호출❓ Activity 가 사용자에게 보여지기 바로 직전에 호출

onStart는 생명주기상 onCreate 다음에 호출된다. 보통 회원가입 등이 필요한 기능에서 리스너 객체 등을 onCreate에서 선언하고 onStart에서 선언된 리스너를 등록한 후, 이미 로그인 된 사용자인지를 구분하여 로그인 화면으로 넘어가지 않고 바로 메인으로 넘어가게 할 때 사용한다. 브로드캐스트리시버를 사용할 때도 보통 여기다가 등록한다! onStop과 짝을 이루고 다루게 된다. (자동 로그인 인증 같은..?)

  • onResume() -언제호출❓ Activity 가 화면에 보여지는 단계 , 사용자에게 Focus 상태!

    • onRestart() - Activity 가 멈춰있다가 다시 화면에 보이면 호출 (stop 이었다가 다시 호출되어 시작할 때 불림)
  • onPause() - 언제호출❓ Activity 위에 다른 Activity 가 올라와서 Focus 를 잃었을 때 , 완전 Activity 가 가려지지 않은 상황에서 호출된다. (일부분 , 투명하게 보일 때 ) 영구적인 data 는 여기서 저장함!

° 애니메이션들(animations)이나 CPU 를 소모해야만 하는 동작들을 정지하기

° 사용자가 액티비티를 떠날 때 영구적으로 저장되기를 기대하는 메모같은 저장되지 않은 변경사항들을 커밋(commit)하기

° 브로드캐스트 리시버(broadcast receivers), 센서(GPS 처럼) 제어들, 사용자가 필요하지 않고 액티비티가 일시정지되어 있는 동안 베터리 소모에 영향을 미치는 어떤 리소스들(resources) 처럼 시스템 리소스들 없애기

게임에서 점수 저장할때 → onPause()

게임에서 점수 복구할때 → onResume()

  • onStop() - 언제호출❓Activity 위에 다른 Activity 가 완전히 올라와서 덮었을 때 호출 (Home 키 누르거나 등 )
  • onDestroy() - 언제호출❓ Activity 가 스택에서 완전히 없어지는 경우 . 즉 ,제거되는 경우이다.

onPause 와 onResume 이 가장 중요하다!!

 

액티비티 백스택 : 백스택은 액티비티 또는 화면 컴포넌트를 담는 안드로이드의 저장 공간

액티비티 A 에서 B를 실행하고 다시 액티비티 B에서 C를 실행하면 종이가 쌓이듯이 액티비티가 화면( 백스택 ) 에 쌓이게 되고, 사용자는 가장 위에 있는 액티비티를 보게 된다.

뒤로가기 버튼을 누르거나 현재 액티비티를 종료하면 현재 액티비티가 스택에서 제거되므로 현재 액티비티 다음에 쌓여있던 액티비티가 백스택의 가장 위로 오면서 화면에 나타나게 된다.

태스크 ) 애플리케이션에서 실행되는 프로세스를 관리하는 작업 단위이다.

Main Activity에서 Detail Activity를 호출했을때 라이프사이클이 호출되는 순서를 나열해보자

 

[MainActivity] onPause()

[DetailActivity] onCreate()

[DetailActivity] onStart()

[DetailActivity] onResume()

[MainActivity] onStop()

 

Detail Activity 종료후 다시 Main Activity가 보여질때 라이프사이클이 호출되는 순서를 나열해보자

 

[DetailActivity] onPause()

[MainActivity] onRestart()

[MainActivity] onStart()

[MainActivity] onResume()

[DetailActivity] onStop()

[DetailActivity] onDestroy()