Language/Android Studio

[Android] 액티비티(Activity) 상태와 생명주기 | Yoon's Dev

Yooniron 2021. 5. 2. 21:22

Android Studio 액티비티(Activity) 상태와 생명주기

 

 


애플리케이션 개념

 

■ 액티비티, 태스크와 프로세스

□ 액티비티

✓ 같은 애플리케이션 내에 존재하는 액티비티뿐만 아니라 다른 애플리 케이션 내에 존재하는 액티비티까지 호출 가능

✓ 한 애플리 케이션에서 다른 애플리케이션의 컴포넌트를 거의 자유자재로 접근 가능

✓ 각 컴포넌트들, 특히 화면에 표시되면서 사용자와 상호작용하는 액티비티는 애플리케이션 단위보다 Task 단위로 관리

 

□ 태스크(Task)

 

✓ 사용자가 실질적으로 "하나의 애플리케이션처럼" 느끼는 액티비티들의 집합

✓ 다수의 프로세스와 APK에 걸쳐 존재 가능

✓ 다른 APK의 액티비티 호출 가능

 

□ 프로세스

✓ 커널 프로레스

✓ 기본적으로 APK는 하나의 프로세스에서 동작

✓ 하나의 APK에서 다수의 프로세스 매핑 가능

 


■ 액티비티 스택

액티비티 스택

 

액티비티 상태와 생명주기

 

■ 개요

안드로이드는 모바일 기기에서 구동되기 때문에 데스크탑 애플리케이션에 비해 더욱 효율적인 메모리 관리를 요구

애플리케이션 컴포넌트의 중요 요소인 액티비티도 효율적인 메모리 관리를 위하여 액티비티 생성 및 소멸 과정인

"생명주기"가 있음

액티비티가 중지 혹인 정지 상태일 경우, 해당 프로세스가 메모리에서 제거될 수 있음.

   사용자에게 다시 보여질 때 이전 상태로 복구

액티비티는 액티비티 스택(Activity Stack)을 통해 관리

 

액티비티는 사용자와 상호 작용하는 단위이며 일반적으로 전체 화면을 차지한다.

 

 

■ 액티비티의 3가지 상태

□ 활성(active) 혹은 실행(running) 상태

전경 화면에 있을 경우

해당 액티비티가 사용자 동작에 대한 초점을 가짐

사용자와 상호 작용 가능

 

□ 중지(paused) 상태

초점을 보유하지 않았지만 사용자에게 일부 보임

메모리가 극도로 부족할 경우 시스템에 의하여 강제 종료

사용자와 상호 작용 불가

 

 

□ 정지(stopped) 상태

사용자에게 전혀 보이지 않지만 여전히 모든 상태와 멤버 정보는 유지

다른 컴포넌트가 메모리를 요청하면 시스템에 의하여 강제 종료

 

■ 액티비티의 생명주기

 

액티비티의 생명주기


 

액티비티를 위한 콜백 메서드

 

■ 액티비티를 위한 콜백 메서드

□ onCreate()

 액티비티가 생성될 때 처음으로 호출되는 메서드

 전역 상태의 모든 리소스를 초기화.

   ex) layout과 data binding 등

 액티비티는 기본적으로 버튼, 리스트, 체크박스, 입력 표시줄 등과 같은 위젯들이 배치되어있는 레이아웃을 구성하고     위젯들이 사용자와 상호작용하는 코드를 포함

 

□ onStart()

 액티비티가 초기화 과정을 마친 후 사용자에게 보여줄 준비가 되었을 때 호출

 

□ onResume()

 액티비티가 사용자에게 보여지고 사용자의 입력을 처리할 수 있음

 액티비티 스택의 최상위에 위치

 

□ onPause()

 사용자와 상호작용이 중지

 액티비티 종료 등을 대비해 상태를 저장하는 등의 작업을 수행

 

□ onStop()

 더 이상 액티비티가 사용자에게 보이지 않음

 더 이상 액티비티 스택의 최상위에 위치하지 않음

 

□ onDestory()

✓ 존재하는 모든 리소스를 해제

 시스탬 내에 액티비티가 존재하지 않게 됨

 

 

□ onRestart()

✓ onStop() 메서드 호출 이후 정지  상태에 있던 액티비티를 다시 화면에 표시할 때 호출


 

액티비티 상태 저장하기

 

■ 액티비티 상태 저장하기

 일반적으로 정지된 액티비티는 사용자가 다시 사용할 것을 대비하여 메모리에 상주

 if) 메모리가 부족하게 되면 강제 종료

 

✓ 액티비티를 다시 호출하면??

   . 강제 종료된 상태: 다시 액티비티를 생성한 후 액티비티를 실행

   . 강제 종료되지 않은 상태: 액티비티를 다시 만들 필요가 없고 액티비티를 다시 시작하여 화면에 표시

 

□ onSaveInstanceState()

✓ onPause() 혹은 onStop() 이후 메모리가 부족할 경우 프로세스가 메모리에서 제거될 수 있음

메모리에서 제거되기 전 액티비티 상태를 저장

✓ 매개변수로 액티비티의 동적 상태를 기록할 수 있는 번들(Bundle) 오브젝트를 가짐

 

□ onRestoreInstanceState()

✓ onCreate() 혹은 onStart() 이후 저장된 액티비티 상태를 복원

 

!! onSaveInstanceState()와 onRestoreInstanceState()는 생명주기 메서드가 아니기 때문에 항상 호출되지 않음.

   개발자가 해당 코드의 메서드를 재정의 하여 구현해야 한다.

 

!! 매개변수로 사용되는 savedInstanceState는 저장된 인스턴의 상태, 즉 액티비티 UI 상태를 의미