액티비티와 인텐트

하이솝·2026년 4월 19일

학습 목표

  • 액티비티(Activity)의 개념과 액티비티 라이프사이클을 이해하고 설명할 수 있다.
  • 인텐트(Intent)의 용도와 명시적/암시적 인텐트의 차이를 설명하고 사용할 수 있다.
  • 인텐트로 액티비티 간에 데이터를 주고 받도록 만들 수 있다.
  • ViewModel에 초기값 주는 방법을 이해하고 사용할 수 있다.
  • ViewModel과 SavedStateHandle을 이해하고 사용할 수 있다.

액티비티(Activity)

  • Activity는 앱 구성 요소, 사용자와 상호작용할 수 있는 화면 제공
  • 안드로이드 앱 구성 요소
    액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더
  • 앱의 시작은 보통 액티비티에서 시작함
  • 앱에는 2개 이상의 액티비티가 포함될 수 있음
    Compose UI에서는 한 액티비티에서 컴포저블을 이용해서 여러 화면을 구성하고, 화면 전환을 하는 것이 일반적임
  • 액티비티는 ComponentActivity를 상속하여 만듦
    Compose UI인 경우 ComponentActivity를 상속
    Android View 시스템에서는 Activity나 AppCompatActivity를 상속 API 호환성을 높이기 위해 AppCompatActivity 사용 권장

액티비티(Activity) 사용 - 메소드 오버라이드

  • 라이프 사이클 콜백
    onCreate: 필요한 구성요소 생성
    onStart: 화면에 나타나기 직전
    onResume: 화면에 표시되었을 때
    onPause: 화면이 일부 가려졌을 때, 다이얼로그가 표시되는 경우 등
    onStop: 화면에서 사라져서 보이지 않을 때
    onDestroy: 완전히 소멸된 경우

    현재 액티비티의 상태를 알고, 해당 상태에 맞는 동작을 위해 사용

액티비티 전환 시 라이프 사이클 콜백

  • MainActivity에서 SecondActivity 시작
    MainActivity의 onPause()
    SecondActivity의 onCreate(), onStart(), onResume()
    MainActivity의 onStop()

  • 단말기의 뒤로가기 버튼 누름
    SecondActivity의 onPause()
    MainActivity의 onRestart(), onStart(), onResume()
    SecondActivity의 onStop(), onDestroy()

  • 화면을 회전시켜서 액티비티 보기방향을 바꾸면?
    onPause()onStop()onDestroy()
    onCreate()onStart()onResume()

인텐트(Intent)

  • 일종의 메시지 객체
  • 다른 앱 구성요소에 Intent를 보내 작업을 요청
  • 기본적인 사용 사례
    액티비티 시작하기
    서비스 시작하기
    브로드캐스트 전달하기

인텐트로 액티비티 시작하기

  • 액티비티/서비스 내에서는 startActivity()를 사용하여
    다른 액티비티를 시작할 수 있음
startActivity(Intent(this, SecondActivity::class.java))

위와 같이 명시적으로 액티비티 클래스를 지정하는 것을 명시적 인텐트라고 함
explicit Intent

  • Composable에서는 LocalContext에서 context를 가져와서 사용
    LocalContext는 현재 사용 가능한 context를 알려줌
val context = LocalContext.current
val intent = Intent(context, SecondActivity::class.java)
context.startActivity(intent)

인텐트 유형

  • 명시적(explicit) 인텐트
    시작할 구성 요소의 이름을 지정

  • 암시적(implicit) 인텐트
    이름을 지정하지 않고 일반적인 작업(전화 걸기, 지도 보기 등)을 지정

암시적(implicit) 인텐트 사용

  • 필요한 Activity를 지정하고 Intent를 생성
val context = LocalContext.current
val implicitIntent = Intent(Intent.ACTION_DIAL, "tel:114".toUri())
context.startActivity(implicitIntent)

암시적 인텐트 받기(인텐트 필터)

  • 암시적 인텐트를 받기 위해서는 받으려는 액션과 데이터 스키마를 지정
<activity android:name=".SecondActivity" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>

0개의 댓글