Activity란 무엇이며 어떻게 작동합니까?

Activity는 Android 앱의 기본 구성 요소 중 하나이며, 보통 login 화면, 메시지 목록, 설정 page처럼 사용자 interface가 있는 하나의 화면을 나타냅니다. 각 activity는 Activity 또는 대부분의 경우 AppCompatActivity나 ComponentActivity를 상속하는 class이며, 앱의 AndroidManifest.xml에 등록되어야 합니다. 사용자가 홈 화면에서 앱을 열면 시스템은 앱의 진입점으로 지정된 activity를 시작하며, 그 후 앱은 intent를 통해 다른 activity를 열 수 있습니다.

Activity에는 Android 시스템이 제어하는 lifecycle이 있습니다. onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 같은 메서드를 통해 앱은 화면이 생성되거나, 보이게 되거나, focus를 잃거나, 닫힐 때 알림을 받으므로 적절한 시점에 리소스를 해제하고 데이터를 저장할 수 있습니다. 많은 현대 앱은 하나 또는 몇 개의 activity만 사용하고 개별 화면은 fragment나 Jetpack Compose로 구성하지만, activity는 여전히 앱의 사용자 interface를 시스템과 연결하는 요소입니다.

앱 개발에서 activity는 사용자를 위한 대화형 창 역할을 하는 Android 애플리케이션의 단일 화면을 의미합니다. 각 activity는 사용자 상호 작용을 처리하고 데이터를 표시하는 역할을 하며, 개발자가 역동적이고 매력적인 사용자 경험을 만들 수 있게 합니다. Activity는 서로 데이터를 전달하며 협력할 수 있어 앱에서 매끄러운 탐색과 기능을 보장합니다.

More about Activity

Activity는 사용자 interface가 있는 단일 화면을 나타내는 Android 애플리케이션 개발의 핵심 구성 요소입니다. 각 activity는 사용자 상호 작용을 처리하고 데이터를 표시하는 독립적인 단위이며, 개발자가 역동적이고 매력적인 사용자 경험을 만들 수 있게 합니다. Activity는 Android 앱의 기본 구성 요소이며, 사용자가 앱의 기능과 상호 작용하는 진입점 역할을 합니다.

기술적으로 activity는 Android SDK의 Activity class의 하위 class이며, activity가 생성, 시작, 중지, 소멸되는 방식을 제어하는 lifecycle 메서드를 처리하는 방식으로 작동합니다. Activity가 시작되면 일련의 lifecycle 단계를 거치며, 이를 통해 개발자는 리소스를 효율적으로 관리하고 사용자 상호 작용에 대응할 수 있습니다. 여기에는 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 같은 메서드가 포함되며, 각 메서드는 원활하고 반응성 있는 사용자 경험을 보장하는 데 역할을 합니다.

Activity는 여러 방식으로 표시될 수 있으며, 각 방식은 서로 다른 유형의 상호 작용을 지원합니다.

  1. 전체 화면: 여기서 activity는 사용자 상호 작용을 처리하고 데이터를 표시하는 독립된 화면 역할을 합니다. 이는 사용자가 앱의 여러 화면 사이를 탐색하는 가장 일반적인 형태입니다.

  2. 대화 상자 형태: Dialog theme을 사용하면 activity는 현재 화면 위에 떠 있는 대화 상자로 표시됩니다. 이는 현재 맥락을 벗어나지 않고 중요한 메시지를 보여 주거나 사용자 입력을 요청할 때 가끔 사용되지만, 대화 상자는 dialog fragment나 Compose로 구현하는 경우가 더 많습니다.

  3. 몰입 모드: Activity가 화면을 완전히 제어하고 상태 표시줄과 탐색 표시줄 같은 시스템 표시줄을 숨겨 몰입형 경험을 제공합니다. 이는 콘텐츠에 대한 집중이 중요한 게임이나 미디어 재생에 이상적입니다.

Activity의 가장 큰 강점 중 하나는 복잡한 사용자 상호 작용과 탐색 패턴을 처리하는 능력입니다. Android의 activity 모델은 사용자가 이전 화면으로 돌아갈 수 있게 하는 back stack 같은 여러 탐색 패턴을 지원하여 직관적이고 예측 가능한 사용자 경험을 만듭니다. 또한 activity는 intent를 통해 데이터를 공유하고 서로 통신할 수 있어 앱의 여러 부분 사이의 매끄러운 통합을 가능하게 합니다.

Activity는 리소스 효율적으로 설계되기도 했습니다. Android의 lifecycle 메서드를 통해 개발자는 activity가 보이지 않을 때 불필요한 리소스를 해제하고 foreground로 돌아올 때 다시 불러와 리소스 소비를 최적화할 수 있습니다. 이는 리소스가 제한된 기기에서도 앱이 반응성과 효율성을 유지하도록 돕습니다.

실제로 activity는 Android 앱이 설계되고 개발되는 방식을 형성했습니다. Activity는 사용자 상호 작용과 탐색 패턴을 처리하는 구조화된 접근 방식을 제공하여 개발자가 풍부하고 매력적인 사용자 경험을 만들 수 있게 합니다. Activity는 많은 인기 앱의 핵심에 있으며, 콘텐츠를 구성하고 사용자 입력을 처리하며 여러 기능 사이를 탐색하는 데 사용됩니다.

요약하면 activity는 유연성, 효율성, 사용 편의성을 하나의 솔루션으로 결합하여 개발자가 강력하고 직관적인 앱을 만들 수 있게 하는 Android 개발의 필수 요소입니다. 복잡한 lifecycle과 탐색 패턴을 처리하는 능력 덕분에 사용자 경험과 효율적인 리소스 관리가 중요한 현대 앱 개발에서 핵심 도구입니다.

Frequently asked questions about Activity

Android에서 activity란 무엇입니까?

Activity는 Android 앱의 기본 구성 요소 중 하나입니다. 보통 login 화면, 메시지 목록, 설정 page처럼 사용자 interface가 있는 하나의 화면을 나타냅니다. 사용자는 activity를 통해 앱과 상호 작용합니다.

각 activity는 Activity 또는 더 흔하게는 AppCompatActivity나 ComponentActivity를 상속하는 class이며, AndroidManifest.xml file에 선언되어야 합니다. 하나의 activity가 진입점으로 표시되어 사용자가 앱 아이콘을 탭할 때 시스템이 무엇을 열지 알 수 있습니다. 현대 앱은 activity가 적은 경우가 많으며, 여러 화면을 보여 주기 위해 fragment나 Jetpack Compose를 사용합니다.

Activity의 lifecycle은 어떻게 작동합니까?

Activity는 생성되는 순간부터 닫힐 때까지 일련의 상태를 거칩니다. Android는 상태가 바뀔 때 특정 메서드를 호출합니다. onCreate는 activity가 생성될 때 호출되며, 여기서 사용자 interface가 설정됩니다. onStart와 onResume은 activity가 보이게 되고 사용할 준비가 되었을 때 호출됩니다.

사용자가 다른 앱이나 화면으로 전환하면 onPause와 onStop이 호출되고, activity가 완전히 닫히면 onDestroy가 호출됩니다. 적절한 메서드에 코드를 배치하면 앱은 예를 들어 보이지 않을 때 video를 멈추고 닫히기 전에 데이터를 저장할 수 있습니다. 잘못 처리하면 오류가 발생하고 리소스가 낭비될 수 있습니다.

앱은 activity 사이를 어떻게 전환합니까?

앱은 intent를 통해 한 activity에서 다른 activity로 전환합니다. Intent는 어떤 activity를 열어야 하는지 설명하며, 새 화면이 보여 줄 제품의 ID 같은 데이터를 담을 수 있습니다. Intent는 startActivity 메서드로 보냅니다.

새 activity는 back stack이라는 stack의 맨 위에 놓입니다. 사용자가 뒤로 가기를 누르면 맨 위 activity가 닫히고 이전 activity가 다시 표시됩니다. 새 화면이 선택한 이미지 같은 결과를 반환해야 한다면 Activity Result API를 사용합니다. 그러나 많은 현대 앱은 단일 activity와 Navigation component를 사용하여 그 안에서 화면 사이를 전환합니다.

화면을 회전하면 activity에 어떤 일이 일어납니까?

사용자가 휴대폰을 회전하면 구성이 바뀌며, 기본적으로 Android는 현재 activity를 소멸시키고 다시 생성합니다. 이를 통해 새 방향에 맞는 다른 layout을 불러올 수 있지만, activity에만 보관된 데이터가 손실될 수 있다는 뜻이기도 합니다.

이를 피하기 위해 보통 구성 변경 후에도 유지되며 불러온 목록 같은 데이터를 보존하는 ViewModel을 사용합니다. 입력란의 text나 scroll 위치 같은 소량의 상태는 onSaveInstanceState 또는 Jetpack Compose의 rememberSaveable로 저장할 수 있습니다. 언어, theme, 화면 크기가 바뀔 때도 마찬가지입니다.

Activity와 fragment의 차이는 무엇입니까?

Activity는 시스템이 인식하고 AndroidManifest.xml에 선언되는 독립적인 구성 요소입니다. Activity는 앱의 사용자 interface를 담는 container 역할을 하며, 예를 들어 알림이나 다른 앱에서 직접 시작될 수 있습니다.

Fragment는 항상 activity 안에 존재하는, 더 작고 재사용 가능한 사용자 interface의 일부입니다. Tablet에서 목록과 상세 보기를 나란히 보여 주는 것처럼 같은 activity에 여러 fragment를 표시할 수 있습니다. Fragment에는 자체 lifecycle이 있으며, 이는 fragment를 호스팅하는 activity에 연결되어 있습니다. 많은 앱은 적은 수의 activity와 많은 fragment 또는 Compose 화면을 사용합니다.

Activity의 launch mode란 무엇입니까?

Launch mode는 새 activity가 시작될 때 기존 activity와의 관계에서 어떻게 배치되는지 결정합니다. 기본적으로 같은 activity가 이미 열려 있더라도 매번 새 instance가 생성됩니다.

singleTop을 사용하면 activity가 이미 stack의 맨 위에 있을 경우 새로 만들지 않고 재사용됩니다. singleTask를 사용하면 instance가 하나만 존재하며, 다시 열릴 때 그 위의 activity는 제거됩니다. singleInstance는 activity를 자체 task에 배치하며, Android 12부터 singleInstancePerTask는 task당 하나의 instance를 허용합니다. Launch mode는 AndroidManifest.xml이나 intent의 flag로 지정하며, 예를 들어 알림에서 앱을 열 때 중복을 피하는 데 사용됩니다.

Activity for dummies

앱의 activity는 휴대폰의 한 화면과 같습니다. 책의 한 page라고 생각하면 됩니다. 앱을 열면 뉴스 읽기, 메시지 보내기, 사진 보기처럼 특정한 일을 할 수 있는 화면이 나타납니다. 이러한 화면 하나하나가 “activity”입니다. 뉴스 읽기에서 메시지 보내기로 넘어가는 것은 한 activity에서 다른 activity로 전환하는 것을 의미합니다. 이는 앱이 여러 기능과 정보를 정리하여 쉽게 탐색하고 사용할 수 있게 하는 방식입니다.

댓글 남기기