-
Activity and Activity LifeCycle (생명주기)안드로이드 학습/Android 기술면접 대비 2024. 1. 8. 11:38
참고 : https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko
사용자가 앱을 켜고, 앱을 벗어난 이후 다시 돌아오거나 떠는 앱을 종료하는 다양한 활동의 과정에서 Activity 인스턴스는 라이플 사이클에서 다양한 상태를 거친다. Activity 클래스는 활동이 상태 변화를 알아차릴 수 있는 여러 콜백을 제공합니다.
예를 들어 스트리밍 동영상 플레이어를 빌드하는 경우,
- 사용자가 다른 앱으로 전환할 때 동영상을 일시중지하고 네트워크 연결을 종료할 수 있습니다.
- 사용자가 돌아오면 네트워크를 다시 연결하고, 사용자가 일시중지한 지점에서 동영상을 다시 시작하도록 허용합니다.
- 즉, 각 콜백은 상태 변화에 적합한 특정 작업을 실행할 수 있도록 합니다. 적시에 알맞은 작업을 하고 적절하게 전환을 처리하면 앱이 더욱 안정적으로 기능할 수 있습니다.
수명 주기 콜백을 잘 구현하면 앱에서 다음과 같은 문제가 발생하지 않도록 예방하는 데 도움이 될 수 있습니다.
- 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제
- 사용자가 앱을 사용하지 않는 경우 귀중한 시스템 리소스가 소비되는 문제
- 사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제
- 화면이 가로 방향과 세로 방향 간에 회전할 경우, 비정상 종료되거나 사용자의 진행 상태가 저장되지 않는 문제 등등
Activity LifeCycle에는 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart()가 있다.
Activity LifeCycle
1) onCreate()
- 액티비티가 생성되고 최초 실행될때 호출. (생명주기중 제일 먼저 호출)
- 생략 불가 (다른 부분은 사용 여부에 따라 생략 될 수도 있다는 뜻이다.)
- 생명주기 통틀어서 단 한 번만 수행되는 메소드.
- 필요한 리소스들 초기화
2) onStart()
- Activity가 화면에 표시되기 직전에 호출됨
- onStop 이후 다시 Activity에 진입했을 때 진행해야 할 작업에 중점을 두고 처리 (BroadcastReceiver 등등)
- ON_START 이벤트 이후에 무언가를 초기화하는 경우, ON_STOP 이벤트 이후에 이를 해제하거나 종료
3) onResume()
- Activity가 화면에 보여지는 직후(foreground에 표시될 때)에 호출됨
- 사용자한테 화면에 보여지고 상호작용하는 메서드이다.
- ON_RESUME 이벤트 이후에 초기화하는 경우, ON_PAUSE 이벤트 이후에 해제하세요.
4) onPause()
- 사용자가 화면을 떠날 때 시스템이 첫 번째로 이 메서드를 호출한다.
- 현재 Activity가 사용자에게 포커스 아웃 되어있는 상태
- 다른 Activity가 호출되기 전에 실행되기 때문에 무거운 작업을 수행하지 않도록 주의해야함 ( 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션 X)
- 일시 정지할 때 필요 없는 리소스 해체하거나 Data는 이곳에 저장 (간단한 데이터 - SharedPreference사용해서)
- 예: 카메라 미리보기 정지, GPS 등등 배터리 수명에 영향을 미칠 숫 있는 모든 리소스를 해제할 수 있다.
5) onStop()
- Activity가 다른 Activity에 의해 100% 가려질 때 호출되는 메소드
- 이 상태에서 Activity가 호출되면, onRestart() 메소드가 호출됨
- 이 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱이 필요하지 않는 리소스를 해제하거나 조정해야 한다
- 예를 들어 애니메이션을 해제하거나 데이터베이스 저장 작업을 하면 된다.
- 정보를 데이터베이스에 저장할 적절한 시기를 찾지 못했다면 onStop() 상태일 때 저장
- Room DB에 내용을 저장할 때 이때 저장할 수 있다.
6) onDestroy()
- Activity가 소멸되기 직전에 호출됨
- Activity가 종료되는 경우
- 사용자: finish(), onBackPressed()
- 시스템: 메모리부족(프로세스 종료)
- onStop(), onDestroy() 메소드는 메모리 부족이 발생하면 스킵될 수 있음
7) onRestart()
- onStop()이 호출된 이후에 다시 기존 Activity로 돌아오는 경우에 호출되는 메소드
- onRestart()가 호출된 이후 이어서 onStart()가 호출됨
Activity 전환간에 생명주기 (참고 사이트 : 링크)
1. activity A 부터 activity B 로 전환- (activity A) onPause()
- (activity B) onCreate()
- (activity B) onStart()
- (activity B) onResume()
- (activity A) onStop()
2. activity B에서 activity B 로 돌아올때
- (activity B) onPause()
- (activity A) onRestart()
- (activity A) onStart()
- (activity A) onResume()
- (activity B) onStop()
- (activity B) onDestory()
'안드로이드 학습 > Android 기술면접 대비' 카테고리의 다른 글
안드로이드 LiveData (0) 2024.02.06 안드로이드 프로세스 및 어플리케이션 생명주기 (0) 2024.01.18 Activity와 Fragment의 차이점 및 사용 이유 (1) 2024.01.08 Rxjava (0) 2024.01.05 안드로이드 4대 컴포넌트 (0) 2023.08.13