액티비티 생명주기는 onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestory()
순으로 실행되며, 경우에 따라서 onRestart()
메소드가 호출되기도 한다.
onCreate()
는 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용된다.
onRestart()
는 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출된다.
onStart()
는 액티비티가 사용자에게 보여지기 바로 직전에 호출된다.
onResume()
액티비티가 사용자와 상호작용하기 바로 전에 호출된다.
onPause()
다른 액티비티가 보여질 때 호출된다. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드이다.
onStop()
액티비티가 더이상 사용자에게 보여지지 않을 때 호출된다. 메모리가 부족할 경우에는 onStop()
메소드가 호출되지 않을 수도 있다.
onDestroy()
액티비티가 소멸될 때 호출된다. finish()
메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출된다.
위에도 언급했지만 onStop()
, onDestory()
는 호출되지 않을 수도 있다.
액티비티는 인스턴스 생성과 동시에 생성 관련 생명 주기 메서드가 순차적으로 호출된다.
액티비티를 종료하면 소멸과 관련된 생명 주기 메서드가 순차적으로 호출된다.
-
onCreate()
→ 생성된 화면 구성요소를 메모리에 로드한다. -
onStart()
,onResume()
→ 화면의 구성요소를 나타내고 사용자와 상호작용을 시작한다.(Resumed: 실행 중)
-
onPause()
,onStop()
→ 뒤로 가기,finish()
를 실행할 때 동시에 실행된다. -
onDestory()
→ 최종적으로 액티비티가 메모리에서 제거된다.
-
onPause()
,onStop()
→ 현재 액티비티를 종료하지 않고 새로운 액티비티가 만들어질 때(Stopped) -
onStart()
,onResume()
→ 두 메소드가 연속적으로 실행되고 Resumed 상태로 변경된다.
-
onPause()
→ 완전히 사라진 것은 아니므로 Paused 상태로 변경된다. -
onResume()
→ 정지가 아니니 onStart를 거치지 않고 바로onResume
로 Resumed한다.
-
불투명한 새로운 액티비티가 최상단으로 올라와서 기존 액티비티가 완전히 보이지 않게 되면
onPause()
에 이어onStop()
까지 호출된다.불투명 새로운 액티비티가 최상단으로 올라오면 기존 액티비티는 사용자와 더 이상 상호작용을 할 수 없다.
포커스도 새로운 액티비티에 맞춰진다. 그렇기 때문에
onPause()
에 이어onStop()
까지 호출되는 것이다.하지만 새로운 액티비티가 백그라운드 속성값이 투명한 경우는
onPause()
까지만 호출이 된다. -
새로운 액티비티가 아닌 다이얼로그를 띄워서 액티비티 최상단이 아닌상황에서는
onPause()
도 호출되지 않는다.즉 다이얼로그는 액티비티의 일부이기 때문이다.
그 말은 즉 새로운 액티비티가 최상단으로 온 상황이 아니기때문에 아무런 함수가 호출되지 않는다.
정리하자면 다이얼로그를 제외한 액티비티가 최상단으로 올라오면 onPause()
실행 / 최상단 액티비티가 밑에 액티비티를 완전히 보이지 않게 가릴경우 onStop()
까지 실행된다.