액티비티가 무엇이예요? 라고 정의할 수 있을까
이 글을 작성하기 전에 내가 아는 액티비티는 무엇일까 생각해 보았다.
내가 생각하는 Activity를 비유할 수 있는 단어는 화면(Screen)이다. Activity는 한 어플리케이션에 내용을 담는 스크린..
화면이기 때문에 사용자의 입력을 받거나, 내용들을 보여줄 수 있는 기능이 필요하다.
한 화면에서 다른 화면으로 이동하는 로직도 필요하구.
어떠한 의도를 보여줄 수 있는 화면 단위.
이제 구글 공식문서에서는 뭐라고 정의하는지 봐보자.
What is the Activity?
“An activity is a single, focused thing that the user can do.”
“액티비티는 사용자가 수행할 수 있는 집중된 단일 작업입니다”
거의 모든 활동이 사용자와 상호작용하므로 Activity 클래스는 setContentView를 사용하여 UI를 배치할 수 있는 창을 생성한다.
Activity Lifecycle
시스템의 액티비티들은 Activity Stack으로 관리된다.
Activity는 크게 4가지의 상태가 있다고 한다.
- Activity가 화면의 전경( 최상위 스택 )에 있으면 active(활성 중)이거나 running(실행중)이다. 이 Activity는 현재 사용자가 상호작용하는 Activity다.
- Activity는 포커스를 잃었지만 여전히 사용자에게 표시되면 볼 수 있다.
- 이런 경우가 무엇이냐면, 전체 크기가 아니거나
- 투명한 Activity가 너의 Activity 위에 포커스가 있을때
- 다른 Activity가 다중 창 모드에서 더 높은 위치에 있거나
- Activity 자체가 포커스를 받을 수 없는 경우일때
- 이러한 활동들은 완전히 살아있는 상태다.
- Activity가 다른 Activity에 의해 와전히 가려지면 중지되거나 숨겨진다. 여전히 모든 상태 및 정보들을 유지하지만 더이상 사용자에게 표시되지 않으므로 해당 창은 숨겨져 있으며, 다른 곳에서 메모리가 필요할 때 시스템에 의해 종종 종료된다.
- 시스템은 Activity를 종료하도록 요청하거나 단순히 해당 프로세스를 종료하여 활동을 파괴함으로써 메모리에서 Activity를 삭제할 수 있다. 사용자에게 다시 표시되면 완전히 다시 시작하고 이전 상태를 복원할 필요가 있다.
Activity Lifecycle Diagram

- Activity의 Entire Lifecycle은 onCreate(Bundle)로 시작해서 onDestory()로 끝이 난다.
- Activity의 Visible Lifecycle은 onStart()과 onStop()사이에서 호출된다. 이 시간 동안 foreground가 아니고, 사용자와 상호작용을 안해도 사용자는 Activity를 볼 수 있다.
- onStart()와 onStop()을 사용자에 의해 여러번 호출될 수 있다.
- Activity의 Foreground Lifecycle은 onResume() 호출과 그에 상응하는 onPause() 호출 사이에 발생한다. 이 시간 동안 Activity는 표시되고 활성화되며 사용자와 상호작용한다.
- Activity는 resumed와 paused를 자주 오갈 수 있다. 예를들어 절전모드로 전환되거나, activity result가 전달되거나, 새로운 intent가 전달될 때
모든 Activity는 onCreate( Bundle)에서 초기설정을 하고, onPause()를 구현해서 데이터 변경을 커밋하고, onStop()을 구현해서 더이상 화면에 표시되지 않는 것을 처리한다.
- onCreate() : Activity가 처음 생성될 때 호출된다. 데이터 바인딩, View만들기 등을 해야한다. 이전 상태에 대한 복원을 위해서 번들을 제공한다.
- onRestart : Activity가 onStop()되고, 다시 시작되기 전에 호출된다.
- onStart : Activity가 사용자에게 표시될 때 호출
- onResume : Activity가 사용자와 상호작용할 때 호출된다. Activity stack의 맨위에 있다. 사용자의 입력을 받을 수 있음.
- onPause : Activity가 전경( stack의 최상위 ) 상태를 잃거나, 초점을 맞출 수 없거나, 중지/ 숨김 또는 destroy되기 전에 호출된다. Activity는 여전히 사용자에게 표시(visibile lifecycle 안에 있기 때문에) 되므로, UI를 업데이트 하는게 좋다.
- onStop : Activity가 사용자에게 더이상 표시가 되지 않을 때 호출된다. 애니메이션을 중지하거나 UI를 새로 고치는 등의 작업을 한다.
- onDestroy : Activity가 소멸되기 전에 마지막으로 호출된다.
onStop과 onDestroy는 코드의 다른 줄이 실행되지 않아도 언제든지 시스템에서 죽일 수 있다. 이 때문에 onPause에서 저장소에 모든 데이터를 저장해야한다.
또한 onSaveInstanceState는 Activity를 백그라운드 상태에 놓기 전에 호출되어서 Bundle에 저장해서 나중에 onCreate(Bundle)에서 저장된 값을 수신할 수 있다.
onPause에서 데이터 저장을 하는게 좋은 이유가 onSaveInstanceState가 수명주기 callback이 아니여서 모든 상황에서 호출되지 않기 때문에.
onStart와 onResume의 차이?
정리해보자면, onStart와 onResume은 둘다 Activity의 visible lifecycle에 속하는 lifecycle callback이다.
둘다 사용자에게 보이지만, onResume은 사용자와 상호작용이 가능한 상태이다.(입력을 받을 수 있다, 또한 화면이 최상위에 있는 상태) . 하지만 onStart는 최상위 상태에 있지 않아도 호출된다.
Activity를 무엇이라고 할 수 있나?
Activity는 사용자에게 보여질 수 있는 스크린을 말하고, 사용자에게 Activity에서 보여질 View를 정의하거나, 화면에 상태에 따른 데이터를 관리하기 위한 여러가지 Lifecycle에 대한 callback들이 존재한다. 또한 리소스 낭비를 피하기 위해서 적절한 callback에서 작업들을 처리해줄 필요가 있다.
'Android' 카테고리의 다른 글
BuildType과 ProductFlavors (2) | 2023.10.12 |
---|---|
setContentView in Activity (0) | 2023.03.02 |
Android에서 잠금화면 만들어보자 (0) | 2023.01.19 |
Notification을 수신해보자! (0) | 2022.12.08 |
LiveData를 뜯어보자 (0) | 2022.11.23 |
액티비티가 무엇이예요? 라고 정의할 수 있을까
이 글을 작성하기 전에 내가 아는 액티비티는 무엇일까 생각해 보았다.
내가 생각하는 Activity를 비유할 수 있는 단어는 화면(Screen)이다. Activity는 한 어플리케이션에 내용을 담는 스크린..
화면이기 때문에 사용자의 입력을 받거나, 내용들을 보여줄 수 있는 기능이 필요하다.
한 화면에서 다른 화면으로 이동하는 로직도 필요하구.
어떠한 의도를 보여줄 수 있는 화면 단위.
이제 구글 공식문서에서는 뭐라고 정의하는지 봐보자.
What is the Activity?
“An activity is a single, focused thing that the user can do.”
“액티비티는 사용자가 수행할 수 있는 집중된 단일 작업입니다”
거의 모든 활동이 사용자와 상호작용하므로 Activity 클래스는 setContentView를 사용하여 UI를 배치할 수 있는 창을 생성한다.
Activity Lifecycle
시스템의 액티비티들은 Activity Stack으로 관리된다.
Activity는 크게 4가지의 상태가 있다고 한다.
- Activity가 화면의 전경( 최상위 스택 )에 있으면 active(활성 중)이거나 running(실행중)이다. 이 Activity는 현재 사용자가 상호작용하는 Activity다.
- Activity는 포커스를 잃었지만 여전히 사용자에게 표시되면 볼 수 있다.
- 이런 경우가 무엇이냐면, 전체 크기가 아니거나
- 투명한 Activity가 너의 Activity 위에 포커스가 있을때
- 다른 Activity가 다중 창 모드에서 더 높은 위치에 있거나
- Activity 자체가 포커스를 받을 수 없는 경우일때
- 이러한 활동들은 완전히 살아있는 상태다.
- Activity가 다른 Activity에 의해 와전히 가려지면 중지되거나 숨겨진다. 여전히 모든 상태 및 정보들을 유지하지만 더이상 사용자에게 표시되지 않으므로 해당 창은 숨겨져 있으며, 다른 곳에서 메모리가 필요할 때 시스템에 의해 종종 종료된다.
- 시스템은 Activity를 종료하도록 요청하거나 단순히 해당 프로세스를 종료하여 활동을 파괴함으로써 메모리에서 Activity를 삭제할 수 있다. 사용자에게 다시 표시되면 완전히 다시 시작하고 이전 상태를 복원할 필요가 있다.
Activity Lifecycle Diagram

- Activity의 Entire Lifecycle은 onCreate(Bundle)로 시작해서 onDestory()로 끝이 난다.
- Activity의 Visible Lifecycle은 onStart()과 onStop()사이에서 호출된다. 이 시간 동안 foreground가 아니고, 사용자와 상호작용을 안해도 사용자는 Activity를 볼 수 있다.
- onStart()와 onStop()을 사용자에 의해 여러번 호출될 수 있다.
- Activity의 Foreground Lifecycle은 onResume() 호출과 그에 상응하는 onPause() 호출 사이에 발생한다. 이 시간 동안 Activity는 표시되고 활성화되며 사용자와 상호작용한다.
- Activity는 resumed와 paused를 자주 오갈 수 있다. 예를들어 절전모드로 전환되거나, activity result가 전달되거나, 새로운 intent가 전달될 때
모든 Activity는 onCreate( Bundle)에서 초기설정을 하고, onPause()를 구현해서 데이터 변경을 커밋하고, onStop()을 구현해서 더이상 화면에 표시되지 않는 것을 처리한다.
- onCreate() : Activity가 처음 생성될 때 호출된다. 데이터 바인딩, View만들기 등을 해야한다. 이전 상태에 대한 복원을 위해서 번들을 제공한다.
- onRestart : Activity가 onStop()되고, 다시 시작되기 전에 호출된다.
- onStart : Activity가 사용자에게 표시될 때 호출
- onResume : Activity가 사용자와 상호작용할 때 호출된다. Activity stack의 맨위에 있다. 사용자의 입력을 받을 수 있음.
- onPause : Activity가 전경( stack의 최상위 ) 상태를 잃거나, 초점을 맞출 수 없거나, 중지/ 숨김 또는 destroy되기 전에 호출된다. Activity는 여전히 사용자에게 표시(visibile lifecycle 안에 있기 때문에) 되므로, UI를 업데이트 하는게 좋다.
- onStop : Activity가 사용자에게 더이상 표시가 되지 않을 때 호출된다. 애니메이션을 중지하거나 UI를 새로 고치는 등의 작업을 한다.
- onDestroy : Activity가 소멸되기 전에 마지막으로 호출된다.
onStop과 onDestroy는 코드의 다른 줄이 실행되지 않아도 언제든지 시스템에서 죽일 수 있다. 이 때문에 onPause에서 저장소에 모든 데이터를 저장해야한다.
또한 onSaveInstanceState는 Activity를 백그라운드 상태에 놓기 전에 호출되어서 Bundle에 저장해서 나중에 onCreate(Bundle)에서 저장된 값을 수신할 수 있다.
onPause에서 데이터 저장을 하는게 좋은 이유가 onSaveInstanceState가 수명주기 callback이 아니여서 모든 상황에서 호출되지 않기 때문에.
onStart와 onResume의 차이?
정리해보자면, onStart와 onResume은 둘다 Activity의 visible lifecycle에 속하는 lifecycle callback이다.
둘다 사용자에게 보이지만, onResume은 사용자와 상호작용이 가능한 상태이다.(입력을 받을 수 있다, 또한 화면이 최상위에 있는 상태) . 하지만 onStart는 최상위 상태에 있지 않아도 호출된다.
Activity를 무엇이라고 할 수 있나?
Activity는 사용자에게 보여질 수 있는 스크린을 말하고, 사용자에게 Activity에서 보여질 View를 정의하거나, 화면에 상태에 따른 데이터를 관리하기 위한 여러가지 Lifecycle에 대한 callback들이 존재한다. 또한 리소스 낭비를 피하기 위해서 적절한 callback에서 작업들을 처리해줄 필요가 있다.
'Android' 카테고리의 다른 글
BuildType과 ProductFlavors (2) | 2023.10.12 |
---|---|
setContentView in Activity (0) | 2023.03.02 |
Android에서 잠금화면 만들어보자 (0) | 2023.01.19 |
Notification을 수신해보자! (0) | 2022.12.08 |
LiveData를 뜯어보자 (0) | 2022.11.23 |