안드로이드 액티비티 생명주기
이번에 Django rest api 서버 포지션으로 안드로이드와 협업하는 경험이 있었다.
안드로이드 어플을 개발함에 있어서 안드로이드 컴포넌트 중 하나인 액티비티 생명주기에 대해 깊은 이해가 필요한 것을 보고 정리하게 되었다.
수명주기 콜백 메서드
onCreate()
- 액티비티가 생성될 때 호출되면 사용자 인터페이스 초기화에 사용됨.
- 필수적으로 구현해야 함.
- 데이터를 목록에 바인딩하고, 액티비티를 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화할 수 있음.
- 이후 시스템이 연달아 onStart()와 onResume() 메서드를 호출
onStart()
- 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
- 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비
- 앱이 UI를 관리하는 코드를 초기화
- onStart() 메서드는 매우 빠르게 완료되고, 이후 onResume() 메서드를 호출함
onResume()
- 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
- 전화, 다른 액티비티으로 이동, 기기 화면이 꺼지는 등의 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 onResume() 상태에 머무름.
- 방해되는 이벤트 발생시 시스템이 onPause() 콜백을 호출
- 액티비티가 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출함. 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 액티비티가 재개될 때마다 필요한 다른 초기화 작업도 수행해야 함.
onPause()
- 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등 처리할 때 쓰이는 메소드
- 사용자가 액티비티에서 떠나는 첫 신호로 시스템은 onPause() 메서드를 호출. 액티비티가 포그라운드에 있지 않다는 것을 나타냄.
- 구성요소가 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
- opPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있음. 따라서 onPause()를 사용하여 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행하면 안 됨. 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 함.
onStop()
- 액티비티가 더 이상 사용자에게 보여지지 않을 때 호출됨.
- 새로 시작된 액티비티가 화면 전체를 차지할 경우에 적용.
- 구성요소가 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
- 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 함.
- 멀티 윈도우 모드를 더욱 잘 지원하기 위해 UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때 onPause() 대신 onStop()을 사용하는 것이 좋음.
- onStop()을 사용하여 CPU를 비교적 많이 사용하는 종료 작업을 실행해야 함. 예를 들어 정보를 데이터베이스에 저장할 적절한 시기를 찾지 못했다면 onStop() 상태일 때 저장할 수 있음.
- 액티비티가 중단됨 상태에 들어가면 액티비티 객체는 메모리 안에 머무르게 된다.
- 액티비티가 다시 시작되면 시스템은 onRestart()를 호출. 액티비티가 실행을 종료하면 시스템은 onDestroy()를 호출.
onRestart()
- 액티비티가 멈추었다가 다시 시작되기 바로 전에 호출됨.
onDestroy()
- 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.
- 구성 변경으로 인해 onDestory()가 호출되는 경우 시스템이 즉시 새 활동 인스턴스를 생성한 다음, 새로운 구성에서 그 새로운 이스턴스에 관해 onCreate()를 호출
Reference
'Android' 카테고리의 다른 글
구글 애널리틱스(Google Analytics) 애플리케이션 사용자 분석 (0) | 2020.06.20 |
---|