본문 바로가기

Android Studio (Kotlin)

Android Component (1)

Activity

  • Activity : 사용자에게 UI 화면을 제공하는데 있어 가장 기본이 되는 앱 컴포넌트
  • 하나의 앱은 앱 최초 실행 시 보여지는 하나의 메인 액티비티를 가진다. 액티비티에 다양한 컴포넌트들을 추가하여 다채로운 UI를 구성할 수 있다.
  • Activity 생성 : 모든 Activity는 반드시 Manifest 파일에 선언되어야 한다.

 

Activity 생명주기 

  • onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 순으로 실행된다. 경우에 따라 onRestart() 메소드 호출
  • 필요성 : PC환경에서 모바일 환경으로 전환되면서 사용자가 사용하는 디스플레이의 화면이 작아졌으며 이에 따라 여러 이슈들 발생, 생명주기를 통해 특정 Activity의 상태를 메서드로 표현하여 화면이 작아지면서 생긴 다양한 화면 상태들을 파악하고 해당 상황에 원하는 동작을 수행할 수 있다.
  • onCreate : Activity가 생성될 때 호출, 사용자 인터페이스 초기화에 사용되는 메서드
  • onStart : Activity가 사용자에게 표시되기 직전에 호출, onStop과 짝을 이뤄 사용됨
  • onResume : Activity가 사용자와 상호작용하기 바로 전에 호출됨. 이 시점에서 Activity는 Activity Stack 최상단에 있게됨. onPause와 짝을 이뤄 사용
  • onPause : Activity가 비활성화 되었을 때 호출됨
  • onStop : Activity가 더 이상 사용자에게 보여지지 않을 때 호출됨. 이 경우에는 onRestart를 거쳐 onStart 주기로 넘어가 애플리케이션을 다시 실행할 수 있음. 아직 Activity 가 완전히 소멸된 상태는 아니다.
  • onDestroy : Activity를 완전히 종료, 즉 애플리케이션을 완전히 종료했을 때 호출된다. 이 때 애플리케이션을 다시 실행시키면 onCreate부터 생명주기가 시작된다.

Intent

  • Intent : Android 애플리케이션을 구성하는 네 가지 기본 요소
  • Activity, Service, Broadcast Receiver, Content Provider
  • Intent는 해당 요소들 간에 작업 수행을 위한 정보를 전달한다. intent를 통해 메시지를 전달하고 데이터를 주고받기도 한다.
  • 명시적 인텐트와 암시적 인텐트로 구분한다.

명시적 인텐트

  • 실행하고자 하는 컴포넌트 이름과 클래스명이 명시적으로 작성되어 호출할 대상을 확실히 알 수 있는 경우에 사용

암시적 인텐트

  • 인텐트의 액션과 데이터를 지정하긴 했지만 호출할 대상이 달라질 수 있는 경우에 사용한다.
  • 반드시 특정 컴포넌트를 지정하지 않고 원하는 작업 의도만 담고 컴포넌트를 실행할 수 있다.
  • 시스템은 해당 의도를 적절히 처리할 수 있는 컴포넌트를 찾아 해당 작업을 처리한다.

Intent 구성 요소

  • Action : 수행할 액션 이름
  • Data : 수행할 데이터의 URI
  • Category : 수행할 액션에 대한 추가적인 정보
  • Type : 수행할 인텐트 데이터의 명시적인 타입
  • Component name : 대상 컴포넌트의 완전한 클래스 이름
  • Extras : 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키/값

Intent Filter

특정 인텐트를 받을지 말지를 정의하는 역할을 수행한다. 이를 통해 컴포넌트의 특징이 정해진다.

인텐트 필터에 android.intent.action.MAIN과 android.intent.category.LAUNCHER 선언하면 런처 클릭시 진입점이 되는 Activity

인텐트 필터는 AndroidManifest.xml에 정의한다. 인텐트 필터를 구성하는 요소는 인텐트에 작성할 수 있는 요소들과 동일하다. 

 

Task

Task : 관련된 실행 액티비티를들 순서대로 묶어 관리하는 것. 서로 다른 package의 activity가 실행되더라도 하나의 실행 흐름 안에 있게 된다. 

Task는 stack의 형태로 구성된다. 실행되는 Activity들이 차곡차곡 쌓이는 구조이다.

back key를 누르면 top activity가 없어지고 다음 activity가 top activity가 된다. 

맨 마지막의 root activity가 없어지면 task는 완전 종료 된다.

 

Task 제어의 필요성

  • 반복되는 Activity 또는 중복 실행 방지가 필요하다.
  • Activity 실행모드와 flag로 제어

Activity 실행모드

모드 설명
standard 기본 값, task 내에 중복된 activity 허용
singleTop task 내에 top activity와 동일한 activity를 실행하면 중복해서 쌓지 않고 기존의 top activity 재사용
intent flag로 설정 가능 (Intent.FLAG_ACTIVITY_SINGLE_TOP) -> 해당 intent에서만 적용
singleTask 위치에 상관없이 activity를 재사용해 중복을 허용하지 않음
singleInstance 중복을 허용하지 않을 뿐 아니라 혼자서 별도의 task를 구성함

설정방법

  • AndroidManifest.xml에 등록 -> 등록시에 방식이 결정됨
  • intent flag를 이용해 설정 -> runtime에 설정하며 그 때 그 때 다른 값을 지정할 수 있음