안드로이드의 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() 가 실행될 수 있음
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
'Mobile > Android' 카테고리의 다른 글
[Android] 안드로이드 서비스 종류 및 생명주기 (0) | 2022.05.14 |
---|---|
[Android] 안드로이드 스프링부트 서버 통신 (0) | 2022.04.11 |
[Android] 안드로이드 Fragment 생명주기 (0) | 2022.04.08 |
[Android] 안드로이드 브로드캐스트 리시버(Broadcast Receiver) 예제 (0) | 2022.04.04 |
[Android] 안드로이드 4대 컴포넌트 (0) | 2022.04.04 |