티스토리 뷰

반응형

Activity 란 무엇인가?

Android 배우면 가장 먼저 하는 행동이 Activity에 "Hello World!"을 호출 하는 것일 것입니다.

그리고 Activity에 각종 위젯을 만들고 Acitivty 간 통신으로 Intent을 사용하고 있을 것입니다.

면접을 진행하다보면 Activity가 무엇인가요? Content 가 무엇인가요? 라는 질문을 하게 되고, 막상 면접자는 이 질문에 답변을 잘못하게 됩니다.

Activity가 무엇일까요?

이 질문에 최근에 열린 Naver Tech Concert의 한 분이 한줄로 이렇게 표현하셨습니다.

window를 생성하고 관리하는 요소이자 앱의 기본 단위입니다. 

Activity는 window을 생성하고 관리 요소이자 앱의 기본 단위라고 하셨는데 이게 무슨 뜻일까요?

Google Developer 에 따르면 Activity를 다음과 같이 설명하였습니다.

애플리케이션 구성요소로써 일을 하기 위해 상호 작용 할 수 있는 화면을 제공합니다.

window을 생성한다는 것은 일을 하기위한 상호 작용하는 화면을 제공하는 것으로 볼 수 있습니다. (An activity provides the window in which the app draws its UI.)

앱의 기본 단위라는 표현은 애플리케이션의 구성요소라고 생각할 수 있을 거 같습니다.

만약 저에게 Activity에 정의해 달라고 한다면 다음과 같이 표현할 거 같습니다.

Application 구성 요소로써 상호 작용 할 수 있는 Window을 생성 및 관리할 수 있습니다.


애플리케이션 안의 Activity

Google Developer 에서는 애플리케이션의 Activity 동작 프로세스를 명확하게 설명하고 있습니다.

하나의 애플리케이션은 보통 여러 개의 액티비티가 느슨하게 서로 묶여 있는 형태로 구성됩니다. 

통상 한 애플리케이션 내에서 하나의 액티비티가 "주요" 액티비티로 지정되며, 사용자가 이 애플리케이션을 처음 실행할 때 이 액티비티가 사용자에게 표시됩니다. 그런 후 각각의 액티비티는 여러 가지 작업을 수행하기 위해 또 다른 액티비티를 시작할 수 있습니다.

새로운 액티비티가 시작될 때마다 이전 액티비티는 중단되지만 시스템은 해당 액티비티를 스택("백 스택")에 보존합니다. 새로운 액티비티가 시작되면, 백 스택으로 푸시되고 사용자 포커스를 갖게 됩니다. 백 스택은 기본적인 "후입선출" 방식을 지키므로, 사용자가 현재 액티비티를 끝내고 Back 버튼을 누르면 해당 액티비티가 스택에서 팝되고(소멸되고) 이전 액티비티가 재개됩니다.

요약하자면 애플리케이션에서 Acitivity는 하나의 액티비티가 주요 Acitivity로 지정하며 작업에 따라 다른 액티비티를 시작할 수 있습니다. 또한 Activity는 스택에 보관되어 후입 선출 방식으로 관리하고 있습니다.

주요 Activity 가 존재하며 스택 구조를 갖기에 Activity는 생명주기를 갖게 됩니다.



Activity 임시저장

Google Developer 에서는 Activity 임시저장에 대해 명확하게 설명하고 있습니다.

Activity 는 일시중지되거나 중단되었더라도 메모리 안에 그대로 보관되었기 때문에 액티비티의 상태는 그대로 유지됩니다.  

따라서, 사용자가 Activity 내에서 변경한 모든 내용도 그대로 유지되어 액티비티가 포그라운드로 돌아갈 때("재개"될 때) 그와 같은 변경 사항도 그대로 존재하게 됩니다.

그러나 시스템이 메모리를 복구하기 위해 액티비티를 소멸시키는 경우에는 Activity 객체가 소멸되므로 시스템이 액티비티의 상태를 온전히 유지한 채로 간단하게 재개할 수 없게 됩니다. 대신, 사용자가 다시 이 액티비티로 이동해 오면 시스템이 Activity 객체를 다시 생성해야 합니다. 하지만, 사용자는 시스템이 해당 액티비티를 소멸시켰다가 다시 생성했다는 것을 모릅니다. 따라서 액티비티가 예전과 똑같을 것이라고 예상할 것입니다.

이런 상황에서는 액티비티 상태에 관한 정보를 저장할 수 있는 추가 콜백 메서드 onSaveInstanceState()를 구현하여 액티비티 상태에 관한 중요한 정보를 보존할 수 있습니다.

요약하자면 Activity는 일시중지되거나 중지되어도 메모리 안에 정보를 그대로 갖고 있으나 시스템에서 메모리 복구를 위해서 Activity 을 소멸할 경우, 소멸된 Activity의 정보는 저장이 안됩니다. 이 문제점을 막기 위해서 onSaveInstanceState()을 활용하여 key-value 형태로 정보를 임시 저장할 수 있습니다.

참고

Google Developer

Naver Tech Concert


반응형
댓글