Skip to content

Latest commit

 

History

History
93 lines (40 loc) · 4.34 KB

생명주기.md

File metadata and controls

93 lines (40 loc) · 4.34 KB

1주차 심화 과제 - Activity 생명주기 알아보기

image

액티비티 생명주기 메소드

액티비티 생명주기는 onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestory()순으로 실행되며, 경우에 따라서 onRestart() 메소드가 호출되기도 한다.

onCreate()는 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용된다.

onRestart()는 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출된다.

onStart()는 액티비티가 사용자에게 보여지기 바로 직전에 호출된다.

onResume() 액티비티가 사용자와 상호작용하기 바로 전에 호출된다.

onPause() 다른 액티비티가 보여질 때 호출된다. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드이다.

onStop() 액티비티가 더이상 사용자에게 보여지지 않을 때 호출된다. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있다.

onDestroy() 액티비티가 소멸될 때 호출된다. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출된다.

위에도 언급했지만 onStop(), onDestory()는 호출되지 않을 수도 있다.

생명주기 호출

액티비티는 인스턴스 생성과 동시에 생성 관련 생명 주기 메서드가 순차적으로 호출된다.

액티비티를 종료하면 소멸과 관련된 생명 주기 메서드가 순차적으로 호출된다.

액티비티 생성

image

  1. onCreate() → 생성된 화면 구성요소를 메모리에 로드한다.

  2. onStart(), onResume() → 화면의 구성요소를 나타내고 사용자와 상호작용을 시작한다.(Resumed: 실행 중)

액티비티 화면에서 제거

image

  1. onPause(), onStop() → 뒤로 가기, finish()를 실행할 때 동시에 실행된다.

  2. onDestory() → 최종적으로 액티비티가 메모리에서 제거된다.

액티비티를 종료하지 않고 다른 액티비티 실행

image

  1. onPause(), onStop() → 현재 액티비티를 종료하지 않고 새로운 액티비티가 만들어질 때(Stopped)

  2. onStart(), onResume() → 두 메소드가 연속적으로 실행되고 Resumed 상태로 변경된다.

액티비티를 종료하지 않거나, 모두 가려지지 않을 때 다른 액티비티 실행

image

  1. onPause() → 완전히 사라진 것은 아니므로 Paused 상태로 변경된다.

  2. onResume() → 정지가 아니니 onStart를 거치지 않고 바로 onResume로 Resumed한다.

알아두면 좋은 점

  1. 불투명한 새로운 액티비티가 최상단으로 올라와서 기존 액티비티가 완전히 보이지 않게 되면 onPause()에 이어 onStop()까지 호출된다.

    불투명 새로운 액티비티가 최상단으로 올라오면 기존 액티비티는 사용자와 더 이상 상호작용을 할 수 없다.

    포커스도 새로운 액티비티에 맞춰진다. 그렇기 때문에 onPause()에 이어 onStop()까지 호출되는 것이다.

    하지만 새로운 액티비티가 백그라운드 속성값이 투명한 경우는 onPause()까지만 호출이 된다.

  2. 새로운 액티비티가 아닌 다이얼로그를 띄워서 액티비티 최상단이 아닌상황에서는 onPause()도 호출되지 않는다.

    즉 다이얼로그는 액티비티의 일부이기 때문이다.

    그 말은 즉 새로운 액티비티가 최상단으로 온 상황이 아니기때문에 아무런 함수가 호출되지 않는다.

정리하자면 다이얼로그를 제외한 액티비티가 최상단으로 올라오면 onPause()실행 / 최상단 액티비티가 밑에 액티비티를 완전히 보이지 않게 가릴경우 onStop()까지 실행된다.