개념
안드로이드의 기본 구성요소(컴포넌트) 중 앱이 UI를 그리는 창을 제공하는 컴포넌트이다.
우리가 사용하는 앱은 여러 개의 창을 엮어서 만들어진 형태이다.
우리가 자주쓰는 유튜브를 예로 들어보자. 유튜브를 터치하면 유튜브 로고 화면이 보인 후 홈 화면으로 이동된다. 이때 로고와 홈 화면이 각각 하나의 Activity이다.
그렇다면 왜 활동이라고 이름지었을까?
Activity클래스는 한 앱이 다른 앱을 호출할 때 호출하는 앱은 다른 앱을 전체적으로 호출하는 것이 아니라 다른 앱이 하는 '활동'을 호출하기 때문에 Activity라고 지었다.
모바일 앱 환경은 데스크톱의 환경과 다르게 사용자와 앱의 상호작용이 항상 동일한 위치에서 시작되지 않는다.
대신 사용자의 이동경로는 비결정론적(동일한 입력에 다른 과정을 거쳐 다른 결과를 도출)으로 시작된다.
데스크톱 환경에서 이메일을 작성한다고 가정해보자.
우리는 인터넷 익스플로러나 크롬과 같은 브라우저를 열어서 네이버나 지메일과 같은 플랫폼에서 제공하는 메일을 보낸다.
여정을 정리하면 '바탕화면 -> 브라우저 -> 메일 목록 -> 메일 작성'로 항상 정해진 경로이다. 하지만 모바일은 약간 다르다
홈 화면에서 이메일 앱을 열어 이메일 목록을 표시하거나, 소셜 미디어 앱을 사용하고 있는 도중 이메일 앱을 실행해서 이메일을 작성하기 위한 화면으로 이동할 수 있다.
'홈 -> 이메일 -> 이메일 목록 -> 메일 작성', '홈 -> 소셜 미디어 앱 -> 이메일 작성'으로 다른 결과를 만들어 낼 수 있는 것이다.
생명주기
액티비티는 생명주기 전체에 걸쳐서 거치는데 상태 간 전환을 가질 때 7가지 콜백을 사용할 수 있다.
onCreate()
시스템이 액티비티를 생성할 때 실행되는 콜백이다. 생성 시 액티비티의 필수 구성요소를 초기화하는 콜백이다. 여기서 뷰를 생성하고 데이터를 목록에 결합해야 한다. 이 콜백에서 setContentView()를 호출하여 UI를 위한 레이아웃을 정의해야 하며 이 작업이 가장 중요하다.
*onCreate()가 완료되면 다음 콜백은 항상 onStart()이다.*
onStart()
onCreate()가 종료되면 액티비티는 '시작된'상태로 접어든다. 이 콜백은 액티비티가 백그라운드에서 포그라운드로 나와 사용자와 상호작용을 하기 위한 최종 준비과정]이다. 그리고 이 시점에서 사용자가 볼 수 있다.
onResume()
시스템은 이 콜백을 사용자와 상호작용하기 전에 호출한다. 그리고 이 시점에서 액티비티는 액티비티 스택의 최 상단에 위치해있으며 사용자의 모든 입력을 포착해낸다. 대부분의 앱 핵심기능은 onResume() 메서드로 구현된다.
*onResume()() 콜백은 항상 onStart() 뒤에 온다.*
onPause()
시작하고 재시작했으면 정지도 해야 된다. onPause()는 액티비티가 '일시중지'상태일 때 호출된다. 이 상태는 사용자가 뒤로 가기나 최근 버튼을 택할 때 발생한다. 이 콜백을 호출하는 상황은 액티비티가 보이긴 하는데 사용자와 상호작용이 안되고, 액티비티를 떠나면서 곧 '중지'되거나 '다시 시작될'상태로 접어드는 상황이다.
다이얼로그를 띄웠지만 뒤에 보이는 화면은 상호작용이 안 되는 것을 예로 들 수 있다. 이 상태에서 사용자가 UI 업데이트를 기다리고 있다면 계속 업데이트할 수 있다.
아래와 기능은 onPause()에서 쓰면 안 된다.
- 애플리케이션 또는 사용자 데이터를 저장
- 네트워크 호출
- 데이터베이스 트랜잭션을 실행
- onPause()가 실행되면 상태에 따라 onResume()나 onStop()이 올 수 있다.*액티비티가 사용자한테 더 이상 안 보일 때 호출된다.
- onStop()
이다음 콜백은 사용자와 상호작용하기 위해 돌아온다면 onRestart(), 완전히 종료된다면 onDestroy()가 온다.
onRestart()
말 그대로 액티비티가 정지된 상태에서 다시 시작됐을 때 호출된다. 이때 멈췄던 상태로 복구해준다.
이 콜백 뒤엔 항상 onStart()가 따라온다.
onDestroy()
액티비티가 완전히 사라지기 전에 호출하는 콜백이다. 액티비티 입장에선 유언장이라고 볼 수 있다. 일반적으로 리소스를 해제할 때 많이 쓴다.
하나하나 글로 적으면 정말 길지만 간단하게 정리하면
이름 | 상태 | 설명 |
---|---|---|
onCreate | 생성 | 액티비티 생성할 때 |
onStart | 화면에 보임 | 화면에 보여질 때 |
onResume | 실행중, 화면에 보임 | 화면에 보이고 실행 중 |
onPause | 화면이 가려짐 | 일부만 보일 때 |
onStop | 완전히 가려짐 | 완전히 안보일 때 |
onRestart | 완전히 가려졌던거 다시 시작 | 완전히 안보였던거 다시 실행 |
onDestroy | 종료 | 액티비티 종료 |
그림으로 그리면 호출하는 콜백도 쉽게 볼 수 있다.

메모리 적재 방식
액티비티는 스택에 FIFO방식으로 적재된다. 가장 먼저 생성된 액티비티가 Bottom에 가고 나중에 생성된 게 Top에 온다.
'안드로이드 > 기본개념' 카테고리의 다른 글
플로우 차트(Flow Chart) (0) | 2023.03.23 |
---|---|
LiveData (0) | 2022.07.19 |
DP? SP? DPI? PX? (0) | 2022.06.14 |
Inflate (0) | 2022.06.13 |
Context? (0) | 2022.06.06 |