Android

액티비티 생명 주기(Life Cycle) 콜백 함수

태인킴 2020. 9. 8. 16:42
반응형


액티비티생명 주기(Life Cycle)의 호출되는 콜백 함수들에 대해서 알아 보겠습니다.

 

 

1. 생명 주기(Life Cycle)

 

 

2. 생명 주기(Life Cycle) 콜백 함수

onCreate

생성 시

초기화 처리와 뷰 생상(setContentView 호출)

onStart

비표시 시

Activity 가 사용자에게 보여지기 직전에 호출되는 callback 함수

, 통신이나 센서 처리를 시작

onResume

표시 시(재시작만)

사용자가 액티비티와 상호 작용을 하기 직전에 호출 됩니다.

애니메이션 실행 등의 화면 갱신 처리

onPause

최전면 표시

다른 액티비티의 호출로 해당 액티비티가 백그라운드로 진입 할때 호출. 애니메이션을 포함한 CPU를 소모하는 작업들을 중단 시킬때 이곳에서 하면 적절. 이 메서드가 리턴 되기 전까지는 다음 액티비티가 실행 되지 않기 때문에, 이 메서드는 빨리 끝내야 합니다.

애니메이션화면 갱신 처리정지 또는 일시정지 할 때 필요 없는 리소스를 해제 하거나 필요한 데이터를 영속화

onStop

일부 표시(일시정지) 상태

Activity 가 더 이상 보여지지 않는 경우 호출.

통신이나 센서 처리를 정지.

onRestart

비표시(정지) 상태

Activity 가 onStop() 이 호출 된 이후에 재시작 되는 함수.

보통은 아무것도 하지 않아도 됩니다.

onDestory

폐기 시

시스템이 Activity 를 종료하기 직전에 호출 되는 callback 함수.

필요 없는 리소스를 해제, 액티비티 참조는 모두 정리 한다.

 

시스템 메모리가 모자를 경우 시스템은 onStop, onDestroy콜백하지 않고 액티비티를 강제로 종료시켜 메모리를 확보할 때가 있습니다. 이러한 경우 데이터를 영속적으로 보존하려면 액티비티가 일시정지 상태로 전환되는 onPause 에서 이를 처리할 필요가 있습니다.

 

(onCreate, onDestroy),  (onStart, onStop),  (onResume, onPause) 으로 초기화정리를 같이 해주면 좋습니다.

 

onDestroy에서 액티비티가 폐기되면 GC가 메모리 영역에서 해제합니다. 단, 액티비티의 인스턴스가 다른 클래스에서 참조되고 있을 때폐기된 후에도 메모리에 남아 결국 메모리 누수가 발생 합니다. 

 

 

3. onSaveInstanceState(), onRestoreInstanceState()

화면을 세로에서 가로로 돌리거나, 언어 설정 변경, 단말기 SIM 교체에 따른 전화번호 변경 등 디바이스 설정이 변경 된경우 액티비티를 재생성 합니다. 이때 현재 상태를 일시적으로 저장해서 이용하고 싶은 경우 사용하는 콜백 메서드들이 있습니다. onSaveInstanceState(), onRestoreInstanceState() 가 있습니다.

onSaveInstanceState() 에서 현재 상태를 저장하고(예를 들어, 사용자가 EditText에서 입력해 넣은 문자열), onRestoreInstanceState() 에성 상태를 복귀 처리 할수 있습니다. 만약 사용자가 뒤로가기(Back) 키로 액티비티를 명시적으로 폐기한 경우에는 호출되지 않습니다. 영속적으로 데이터를 저장하고 싶으면 onPause() 시점에서 저장 하면 되겠습니다. 또한, MVVM 패턴의 구조에서는 onSaveInstanceState(), onRestoreInstanceState() 를 사용하지 않아도, ViewModel 을 통해서, 설정이 변경되어, 액티비티가 재생성 되었을때의 데이터를 임시적으로 복귀 할수 있습니다.

 

 

반응형