티스토리 뷰
액티비티는 처음 실행될 때 메모리에 쌓이는 가정부터 실행, 중지 해제되는 여러가지 상태정보를 가지며 이러한 상태는 안드로이드 시스템에 의해서 관리되고 각각의 상태에 따라 해당 메서드를 자동으로 호출하게 되어있다.
만약에 새로운 액티비티가 만들어진다면 처음에 onCreate, onStart, onResume순서대로 호출되고, 이렇게 실행된 액티비티는 다른 액티비티가 액티비티 스택의 상위를 차지하게 되면 onPause가 호출되면서 일시정지 상태가 되고, 아예 중지가 되어 버린다면 onStop이 호출되어 정지 상태가 된다. 그러다가 처음의 액티비가 다시 시작된다면 onResume이 호출되고, 액티비티가 메모리에서 아예 제거될 경우에는 onDestroy가 호출된다.
다음은 액티비티 상세 메서드 표이다.
onCreate() | -액티비티가 처음에 생성될 때 호출 -이 메서드 다음에는 항상 onStart가 호출됨 |
onStart() | -액티비티가 화면에 보이기 전에 호출 -액티비티가 화면에 보이면 onResume이 호출 되고, 화면에서 액티비티가 가려지면 onStop메서드가 호출 됨 |
onResume() | -사용자에게 액티비티가 보여지기 바로 전에 수행 됨 |
onRestart() | -액티비티가 중지된 이후 다시 호출 될 때 이 메서드 수행 -이 메서드 다음에는 항상 onStart메서드가 수행 됨 |
onPause() | -다른 액티비티를 호출할 때 수행 됨 -홈키를 누르거나 애플리케이션을 종료할 때 수행 됨 -시스템이 액티비티를 강제로 종료할 수 있음 |
onStop() | -액티비티가 사용자에게 보이지 않을 때 수행 됨 -시스템이 액티비티를 강제로 종료할 수 있음 |
onDestroy() | -액티비티가 메모리에서 소멸되어 없어지기 전에 수행 됨 -시스템이 액티비티를 강제로 종료할 수 있음 |
시나리오.
1. 첫 화면 액티비티1 진입
2. 버튼누르면 액티비티2 진입
3. 뒤로가기 버튼으로 다시 액티비티1 진입
4. 뒤로가기로 안드로이드 홈화면
액티비티1 | startActivity로 액티비티2 호출 | 액티비티2 | 뒤로가기 | 액티비티1 | 홈 화면 |
onCreate() onStart() onResume()
| onPuase() 액티비티1 onCreate() onStart() onResume() onStop() 액티비티1 | onPause() 액티비티2 onStart() onResume() onStop() 액티비티2 onDestroy() 액티비티2 | onPause() onStop() onDestroy() |
액티비티2 액티비티1 |
액티비티2에서 뒤로가기를 탭하면 액티비티1이 호출 되면서 액티비티2는 스택에서 제거되면서 소멸상태가 되기 때문에 onDestroy()가 호출 된다.
액티비티1 액티비티2 액티비티1 |
하지만 알다시피 액티비티2에서 startActivity를 통해 액티비티1을 호출 하면 새로운 액티비티가 스택에 쌓이기 때문에 액티비티2의 onPause, 새로운 액티비티1의 onCreate, onStart, onResume 다시 액티비티2의 onStop메서드가 수행 될 것이다.
액티비티2는 스택에 그대로 남아 있기 때문에 onDestroy는 수행되지 않는다.
액티비티 플래그를 통해서도 이런 라이프사이클 관련 메서드의 호출 순서도 달라질 수 있을 것 같으니 개념을 알고 테스트도 해보고 적용해야 할 것 같다.
'Android > 정리' 카테고리의 다른 글
안드로이드 구성요소(서비스) (0) | 2016.05.24 |
---|---|
수명주기 테스트 코딩 그리고 SharedPreferences인터페이스 (0) | 2016.05.24 |
액티비티가 쌓이는 스택과 플래그 (0) | 2016.05.12 |
인텐트 (0) | 2016.05.10 |
화면 이동과 데이터 전달 (0) | 2016.05.09 |