액티비티 생명주기

·2021년 10월 15일
1

안드로이드

목록 보기
9/17

액티비티 생명주기 함수

안드로이드 컴포넌트 중 액티비티는 내/외부적으로 가장 간섭을 많이 받는다.
개발자는 액티비티 상태 변화에 따라 적절히 대비해야 하고, 어떤 환경에서도 정상적으로 동작시켜야함

결국 안드로이드는 복잡한 액티비티의 상태 변화를 몇 가지로 분류하고, 그 분류에 따라 개발자에게 대처할 수 있는 함수들을 제공 → 액티비티 생명주기 함수

onCreate와 짝을 이루는 onDestroy

onCreate는 액티비티의 시작이고, onDestroy는 액티비티의 끝이다.
onCreate에서는 레이아웃을 생성 및 설정. 또 액티비티를 실행하기 위한 객체 생성 및 초기화
onDestroy는 사용한 객체를 반환 작업 수행. 단, 객체의 메모리 반환은 달빅 JVM이 해제해줌

onPause와 onResume

onPause는 현재 액티비티가 다른 액티비티로부터 부분적으로 가려저 방해를 받는 상태고
onResume은 현재 액티비티가 온전히 보이는 상태다.

onStop과 onStart

onStop은 현재 액티비티가 새로운 액티비티로 인핸 완전히 보이지 않는 상태이고
새로운 액티비티가 종료되면 onRestart → onStart → onResume 함수 순으로 다시 이전 액티비티로 복귀한다.
1. 전원키를 누르거나 일정 시간 동안 대기하면 자동으로 화면이 꺼진다
2. 화면이 꺼진 상태는 화면 잠금 상태 → 액티비티는 홤녀에서 보이지 않기 때문에 정지상태
3,4. 전원키를 누르고 화면 잠금 상태를 해지하면 원래 액티비티로 복귀 → onRestart → ...
5. onResume을 통해서 원래 액티비티가 다시 실행됨
+) 그 밖에도 홈키에 의한 정지도 있다.
+) 반면에 알림창이 화면을 완전히 가리는 경우는 어떤 생명 주기함수도 호출하지 않는다.

onDestroy와 onCreate

화면이 회전하면 이전 UI 레이아웃 화면을 리셋 하고, 새로운 UI 레이아웃 화면을 구성.
새로운 레이아웃 구성을 위해 setContextView 함수가 호출되어야 한다.
→ setContextView는 onCreate 함수에서 호출되어야하기 때문에 현재 액티비티를 종료하고 새로 시작한다.
→ 화면 회전 마다 생명주기를 호출하는 것은 성능을 저하시킴

안드로이드 시스템은 앱 프로세스 상태를 포그라운드(foreground)와 백그라운드(background) 두 가지로 구분함 → 시스템 메모리가 부족해지면 백그라운 상태의 앱 프로세스를 강제로 종료하여 자원을 확보

메모리 부족 시 강제로 종료될 수 있는 백그라운드 상태는 매우 위험하고 불안한 상태?

이를 위해 안드로이드는 강제 종료된 앱의 액티비티를 복원할 수 있는 방법을 제공하고 있다.
1. onSaveInstanceState : onStop 직전에 호출됨. 이 함수에서 백업 데이터를 시스템 프로세스에 전달할 수 있다.
2. onCreate : onStop에서 백업된 데이터를 함수 인자로 받음
3. onRestoreInstanceState : onStop에서 백업된 데이터를 인자로 받음

혹은 onCreate의 번들 인자 saveInstanceState를 통해서 바로 백업본을 화면에 표시할 수 있다.

profile

0개의 댓글