Intent(인텐트)

2022. 4. 23. 21:19·개발/Android
반응형

안드로이드 애플리케이션은 액티비티, 서비스, 브로드캐스트 수신자, 콘텐츠 제공자로 구성된다.

  • 콘텐츠 제공자 : 애플리케이션간의 데이터 공유를 위해 표준화된 인터페이스를 제공하는 컴포넌트다.
  • 액티비티 : 사용자 인터페이스 화면을 구성하는 컴포넌트다. 메모리 관리를 위해 LifeCycle이 있으며 스택구조로 여러 개의 액티비티가 쌓인다.
  • 서비스 : 백그라운드에서 실행되는 컴포넌트, 사용자 인터페이스를 가지지 않는다.
  • 브로드캐스트 수신자 : 시스템으로부터 특정 브로드캐스트를 수신하거나 반응하는 컴포넌트
  • 사용자 인터페이스를 가지지 않는다.

이 4개의 컴포넌트의 액션, 데이터 등을 전달하는 메시지 역할을 하는 것이 인텐트(Intent)다.

즉 애플리케이션 간의 메시지를 주고 받기 위한 용도로 사용한다.

인텐트

인텐트(Intent)

  • 일종의 메시지 객체로서 안드로이드 애플리케이션 구성요소간의 통신수단(객체 타입)
  • 애플리케이션 구성요소를 호출하거나 구성요소간의 메시지(데이터)를 전달하기 위해 사용
  • 즉, 컴포넌트 실행을 안드로이드 시스템에 요청할 때 컴포넌트 정보를 담는 객체를 인텐트라 한다.

인텐트 전달 과정 예시

기초 4개의 컴포넌트에서 인텐트 사용 예시를 확인하자.

사례 설명
액티비티 시작 Activity는 사용자와 상호 작용이 가능한 단일화면 입니다. Activity의 새 인스턴스를 시작하기 위해 startActivity() 메소드를 사용하여 Intent를 전달할 수 있습니다. 호출한 Activity가 완료되었을 때 결과를 수신하기 위해서는 startActivityForResult를 사용합니다.
서비스 시작 Service는 UI 없이 백그라운드에서 작업을 수행하는 요소입니다.
Service를 시작하기 위해 startService() 메소드를 사용하여 Intent를 전달합니다.
브로드캐스트 전달 브로드캐스트는 모든 앱이 수신할 수 있는 메시지로, sendBroadCast(), sendBroadCastOrderd(), sendStickyBroadCast() 메소드에 Intent를 전달하여 BroadCast를 전달할 수 있다.

아래는 인텐트를 이용한 다른 액티비티를 만드는 실습 코드다.

먼저 exam_main.xml이다. 메인화면이다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainExam">

    <TextView
        android:id="@+id/main_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:text="MainActivity"
        android:textSize = "30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:text="Start"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/main_tv_title"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

다음은 exam_sub.xml 이다. 버튼을 누르면 등장하는 서브 화면이다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SubExam">

    <TextView
        android:id="@+id/second_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:text="SecondActivity"
        android:textSize = "30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <Button
        android:id="@+id/btn_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:text="Back"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/second_tv_title"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

아래는 MainExam.kt 코드다.

package com.example.inflate

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import com.example.inflate.databinding.ExamMainBinding

class MainExam : AppCompatActivity() {

    private val binding by lazy{
        ExamMainBinding.inflate(layoutInflater)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        //SecondActivity를 띄우는 이벤트 리스너 등록
        binding.btnStart.setOnClickListener{
            /** SecondActivity를 띄우기 위한 인텐트를 생성한다
             *  생성자 Intent(packageContext, ::class.java)
             *  첫 번째 파라미터 : 액티비티 클래스를 구현하는 컨텍스트로서, 보통 this를 사용
             *  두 번째 파라미터 : 호출할 액티비티 클래스
             */

            val mIntent = Intent(this, SubExam::class.java)
            // 인텐트를 시스템에 전달(요청) -> SecondActivity 띄우기

            startActivity(mIntent)
        }
    }
}

마지막으로 SubExam.kt 코드다.

package com.example.inflate

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.inflate.databinding.ExamSubBinding

class SubExam : AppCompatActivity() {

    private val binding by lazy{
        ExamSubBinding.inflate(layoutInflater)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        //btnBack 를 클릭하면 SecondActivity를 종료하는 이벤트 리스너 등록
        binding.btnBack.setOnClickListener{

            finish()
        }
    }
}

 

이번 포스팅은 이정도로 인텐트에 대해 알아보고 다음에는 인텐트와 관련해서 더 깊은 내용을 정리해보겠습니다.

이상으로 마칩니다. 감사합니다.

반응형
'개발/Android' 카테고리의 다른 글
  • 안드로이드 시스템 스택 관리
  • 인텐트와 데이터 전달
  • Context
  • 레이아웃 인플레이션
Debin
Debin
공부 기록을 남기며 게시글 리팩토링을 진행하는 블로그입니다.
  • Debin
    리팩토링하는 블로그
    Debin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • DB
        • DB 기초
        • MySQL
        • SQL 튜닝
      • OS
      • Network
      • Git
      • 디지털콘텐츠기획
      • 소프트웨어공학
      • 코딩테스트
        • 프로그래머스
        • 백준
        • 인프런
      • 공부 일지
      • 독서
        • 클린코드
        • 일상 속 사물이 알려주는 웹 API 디자인
        • 토비의 스프링
        • 객체지향의 사실과 오해
        • 자바 잘 읽는 법
      • 기록 및 회고
      • Cloud
        • AWS
      • 개발
        • Java
        • Spring Core
        • Spring MVC
        • Spring DB
        • Spring Boot
        • Spring Security
        • Spring Batch
        • JPA
        • Test
        • Android
      • 대외활동
        • UMC SERVER
        • 카엔프 SW 아카데미
      • 프로젝트
      • Docker
      • Gradle
      • ELK
      • 실무 이야기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

    • 본인 깃허브입니다!
  • 인기 글

  • 태그

    spring boot
    spring
    mysql
    innodb
    리눅스
    spring mvc
    SQL
    프록시
    AOP
    데이터베이스
    container
    트랜잭션
    JPA
    컨테이너
    자바
    객체지향
    ORM
    스프링 부트
    토비의 스프링
    스프링
    test
    운영체제
    Java
    코딩 #개발자 #노마드북클럽 #노개북
    redis
    도커
    객체
    AWS
    docker
    인덱스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Debin
Intent(인텐트)
상단으로

티스토리툴바