ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Activity와 인텐트(Intent)
    안드로이드 2024. 3. 20. 15:11

    📝 공부한 Kotlin 정리

    1. 액티비티 (Activity)

    1.1 Activity 개요

    액티비티(Activity)는 안드로이드 애플리케이션의 핵심 구성 요소로서 사용자가 직접 상호 작용하는 창(window)을 의미한다. 각 액티비티는 독립적인 화면으로서, 사용자에게 다양한 작업을 수행할 수 있는 인터페이스를 제공한다.

    • 상호 작용의 예:
      액티비티는 사용자가 전화를 거는 화면, 사진을 찍는 인터페이스, 이메일을 보내거나 지도를 확인하는 등의 다양한 기능을 수행할 때 마다 등장한다.
    • UI 구성:
      각 액티비티는 하나의 창을 가지며, 이 창에는 '뷰(View)'라 불리는 객체들을 통해 사용자 인터페이스가 구성됩니다. 뷰 객체들은 버튼, 텍스트 필드, 이미지 등 사용자가 볼 수 있는 모든 요소들을 포함한다.
    • 애플리케이션의 시작:
      모든 안드로이드 애플리케이션은 최소 한 개 이상의 액티비티를 포함하고 있으며, 앱이 시작될 때 시스템은 지정된 '메인' 액티비티를 실행하여 사용자에게 첫 화면을 보여준다.

    액티비티는 사용자가 애플리케이션과 상호 작용하는 방식을 정의하는 중요한 요소이며, 안드로이드에서의 사용자 경험을 결정짓는 중추적 역할을 한다.

     

    1.2 액티비티와 사용자 인터페이스 연결

    setContentView()를 이용하여 액티비티에 사용자 인터페이스를 정의한 View를 설정한다.

     

    1.3  액티비티 등록

    모든 Activity컴포넌트는 Android Manifest파일에 등록되어야 한다.

     

    안하면, 아래와 같이 ActivityNotFoundException 오류가 발생한다.

     

    1.4  Android Manifest 역할

    AndroidManifest.xml 파일은 애플리케이션의 기본 구조를 정의하고, 시스템이 앱을 어떻게 실행해야 하는지를 알려주는 중요한 지시사항을 담고 있다.

    • 패키지 이름 설정:
      앱의 고유 식별자로서, 애플리케이션의 패키지 이름을 설정한다. 이 이름은 Google Play와 같은 앱 스토어에서 앱을 구별하는 데 사용된다.
    • 구성 요소 선언:
      액티비티, 서비스, 브로드캐스트 리시버, 콘텐트 프로바이더와 같은 애플리케이션 구성요소들의 존재를 시스템에 알린다.
    • 권한 설정:
      앱이 사용자의 기기에서 특정 작업을 수행하기 위해 필요한 권한을 명시한다. 또한, 다른 앱이 이 애플리케이션과 상호작용하기 위해 필요한 권한도 설정할 수 있다.

     

    2. 인텐트(Intent)

    2.1 Intent

    인텐트(Intent)는 Android 애플리케이션 간 통신과 작업을 수행하기 위한 일종의 메시지 객체이다.

    이것을 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드 캐스트리시버)로 작업을 요청할 수 있다.

    2.2 Intent의 유형

    - 명시적 인텐트(Explicit Intent)

    명시적 인텐트는 특정한 컴포넌트를 직접적으로 호출할 때 사용한다. 목적지 컴포넌트(Activity나 Service)의 이름을 직접 지정 하고 startActivity() 또는 startService() 메소드를 통해 해당 컴포넌트를 실행(시작)한다.

    • 사용:
      이 방식은 주로 앱 내부에서 다른 액티비티나 서비스를 시작할 때 사용한다. 예를 들어, 메인 액티비티에서 사용자의 입력을 받아 세부 정보를 표시하는 새로운 액티비티를 띄울 때 명시적 인텐트가 활용된다.

    - 암시적 인텐트(Implicit Intent)

    암시적 인텐트는 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정하여 startActivity() 메소드에 넘긴다. 이 때, 안드로이드 시스템은 이 인텐트를 처리할 수 있는 모든 애플리케이션을 검색하여 적합한 인텐트 필터를 가진 컴포넌트를 찾아 실행시킨다.

    • 사용:
      암시적 인텐트는 주로 다른 앱의 컴포넌트를 실행시키는 데 사용한다. 예를 들어, 사용자가 '지도 보기'를 요청할 때, 해당 작업을 처리할 수 있는 모든 앱 중 사용자가 선택할 수 있도록 안드로이드 시스템이 목록을 제공한다.
    • 인텐트 필터:
      인텐트 필터는 특정 인텐트에 반응하는 액티비티, 서비스 또는 브로드캐스트 리시버의 능력을 정의한다. 즉, 어떤 인텐트를 수신할 준비가 되어 있는지를 나타내는 설정이다.

    2.3 Intent 객체

    인텐트는 안드로이드 앱의 구성 요소들 사이에서 실행을 위임하거나 정보를 전달하는 역할을 한다. 다음은 인텐트의 주요 구성 요소와 그에 대한 실제 사용 예이다.

     

    - 컴포넌트 이름 (Component Name)

    • 타겟 컴포넌트의 이름을 명시하여, 인텐트가 전달될 정확한 대상을 지정한다.
    • 컴포넌트 이름이 없으면, 인텐트는 암시적으로 처리되고, 시스템이 적절한 대상을 찾는다.
    • 예: new Intent(context, TargetActivity.class)에서 TargetActivity.class가 컴포넌트 이름이다.

    - 액션 (Action)

    • 인텐트가 수행해야 할 일반적인 작업을 정의한다.
    • 예: Intent.ACTION_VIEW는 사용자에게 데이터를 보여줄 때 사용된다.
    • 예: Intent.ACTION_DIAL은 전화 다이얼을 열기 위해 사용된다.

    - 데이터 (Data)

    • 작업을 수행하는 데 필요한 데이터의 URI를 지정한다.
    • 데이터는 보통 Uri 객체로 액션과 결합하여 사용된다.
    • 예: **Uri.parse("tel:12345")**는 전화 앱에 전화번호 데이터를 제공한다.

    -  카테고리 (Category)

    • 인텐트의 유형을 더 구체적으로 지정하여, 어떤 컴포넌트가 처리할 수 있는지 알려준다.
    • 예: Intent.CATEGORY_HOME은 홈 화면 애플리케이션을 시작할 때 사용된다.

    - 엑스트라 (Extras)

    • 복잡한 데이터를 인텐트에 전달하기 위한 키-값 쌍의 추가 정보이다.
    • 예: intent.putExtra("extra_key", "value")에서 "extra_key"는 전달할 데이터의 키이며, "value"는 실제 값이다.
    • 엑스트라를 통해 기본 타입부터 Serializable 객체까지 다양한 데이터를 전달할 수 있다.

    2.4 명시적인텐트로 다른 액티비티 시작

    명시적 인텐트(Explicit Intent)는 특정한 액티비티를 시작할 때 사용되며, 안드로이드에서는 이를 통해 현재 액티비티에서 다른 액티비티로 전환할 수 있습니다.

    // 현재 액티비티에서 AnotherActivity를 시작하기 위한 명시적 인텐트 생성
    val intent = Intent(this, AnotherActivity::class.java)
    
    // 인텐트에 데이터 추가 (옵션)
    intent.putExtra("key", "value")
    
    // AnotherActivity 시작
    startActivity(intent)
    • 인텐트 생성:
      Intent 클래스의 인스턴스를 생성한다. 첫 번째 매개변수로는 현재 컨텍스트(this)를, 두 번째 매개변수로는 시작하고자 하는 액티비티의 Class 객체를 전달한다. 위 예제에서 AnotherActivity::class.java는 시작하고자 하는 대상 액티비티를 나타낸다.
    • 데이터 전달 (선택 사항):
      putExtra() 메소드를 사용하여 인텐트에 추가 데이터를 삽입할 수 있다. 이는 키-값 쌍으로 이루어져 있으며, 시작될 액티비티에서 이 데이터를 getStringExtra()를 통해 사용할 수 있다.
    • 액티비티 시작:
      startActivity() 메소드를 호출하여 인텐트를 사용한다. 이 호출이 실행되면 안드로이드 시스템은 명시된 인텐트에 따라 AnotherActivity를 시작한다.
Designed by Tistory.