[안드로이드스튜디오] 인텐트

2021. 9. 19. 16:38·Programming/Mobile

# 인텐트

- 각각의 화면은 별도의 액티비티로 구현됨

- 하나의 액티비티(화면)에서 다른 액티비티(화면)로 전환하려면? -> 인텐트

- 다른 액티비티를 시작하려면 액티비티의 실행에 필요한 여러가지 정보들을 보내줘야함

- 정볼르 인텐트에 실어서보냄

- 명시적 인텐트와 암시적인텐트로 나뉨


# 명시적인텐트

- 타깃 컴포넌트의 이름을 지정

- "애플리케이션 A의 컴포넌트 B를 구동시켜라"와같이 명확하게 지정

- 주로 애플리케이션 내부에서 사용

 

- 실행하고자 하는 액티비티의 이름을 적어줌 ex) NextActivity

- NextActivity.class는 NextActivity클래스에 대한 정보를 가지고 있는 객체

Intent intent = new Intent(this, NextActivity.class);
// 인텐트 객체에 실행하고 싶은 액티비티의 클래스 이름인 NextActivity를 지정
startActivity(intent);
// Intent 객체에 기술된 액티비티를 시작

# 암시적 인텐트

- 타깃 컴포넌트의 이름을 지정하지 않는다.

- 아주 암시적으로 컴포넌트를 지정

- "지도를 보여줄 수 있는 컴포넌트이면 어떤 것이라도 좋다"

- 일반적으로 다른 애플리케이션의 컴포넌트를 구동하는데 사용

- 어떤 작업을 하기를 원하지만 그 작업을 담당하는 컴포넌트의 이름을 명확하게 모르는 경우에 사용

- 특정한 타깃이 없으므로 안드로이드는 인텐트를 처리할 수 있는 가장 최적의  컴포넌트를 탐색하여야 함

- 안드로이드는 컴포넌트가 가지고 있는 인텐트 필터를 암시적인 인텐트와 비교하여 탐색을 수행

 

- 자신이 원하는 작업만을 기술

- 명확한 컴포넌트의 이름은 적지 않음

- 안드로이드가 이 인텐트를 받으면 모든 애플리케이션의 컴포넌트를 뒤져서 가장 알맞은 컴포넌트를 찾아냄

- 참조하는 정보가 애플리케이션의 매니페스트 파일

- 매니패스트 파일의 인텐틔 필터와 암시적 인텐트를 비교하여서 가장 일치하는 컴포넌트를 찾음

- 암시적 인텐트 생성하려면 인텐트 안에 액션과 데이터를 지정하여야 함

 

 

ex) 사용자가 이메일을 보낼 수 있는 화면을 표시하려면 다음과 같은 인텐트를 생성하고 해당 액티비티를 시작

- 인텐트의 엑스트라 필드에는 이메일 송신 주소가 저장됨

- 이메일 액티비티가 이 인텐트를 받으면 일단 이메일 작성 화면을 표시하고 엑스트라 필드에 있는 문자열을 읽어서 이메일의 "to"필드에 입력

- 사용자가 이메일 작성을 완료하고 이메일을 송신하면 이메일 액티비티는 종료되고, 중단되었던 액티비티가 다시 시작됨

Intent intent = new Intent(Intent.ACTION_SEND);
// 이메일 전송을 의미하는 인텐트 생성
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
// 이메일의 송신자를 엑스트라 필드에 기술
startActivity(intent);

 

 

# 인텐트 객체

- 컴포넌트 이름 : 인텐트를 처리하는 타깃 컴포넌트의 이름

  타깃 컴포넌트의 완전한 이름과 패키지 이름을 적으면 됨

  컴포넌트의 이름이 없으면 암시적 인텐트가 되어서 안드로이드가 최적의 타깃 컴포넌트를 찾아줌

  setComponent(), setClass(), setClassName()으로 설정할 수 있고 getComponent()로 읽을 수 있음

- 액션 : 액션은 수행되어야 하는 작업을 나타냄

  ACTION_VIEW, ACTION_EDIT, ACTION_MAIN 등이 있음

  많은 액션들이 Intent 객체 안에 String타입의 상수로 정의 되어 있음

  자주 사용하는 액션들은 표를 참고

상수 타깃 컴포넌트 액션
ACTION_VIEW 액티비티 데이터를 사용자에게 표시
ACTION_EDIT 액티비티 사용자가 편집할 수 있는 데이터를 표시
ACTION_MAIN 액티비티 태스크의 초기 액티비티로 설정
ACTION_CALL 액티비티 전화 통화를 시작
ACTION_SYNC 액티비티 모바일 장치의 데이터를 서버 상의 데이터와 일치시킴
ACTION_DIAL 액티비티 전화번호를 누르는 화면을 표시

- 필요하다면 사용자가 나름대로 액션 문자열을 정의할 수 있음

->  이 경우 애플리케이션 패키지를 앞에 붙여야 함

ex) kr.co.company.SHOW_COLOR

setAction()과 getAction() 메소드를 사용해서 인텐트 객체에 액션을 설정하고 접근할 수 있음

 

 

# 데이터

: 데이터는 작업에 필요한 데이터를 나타냄

ex ) 액션이 ACTION_VIEW라면 무엇을 사용자에게 표시할 것인지를 주어야 함

     데이터는 URI 형식 사용

     setData(), getData() 메소드를 사용해 인텐트 객체에 데이터를 설정하고 접근할 수 있음 

 

ex) 전화를 거는 인텐트를 작성하여 발송하는 절차 코드

...
Intent intent = new Intent(Intent.ACTION_CALL);
// 액션이 ACTION_CALL인 인텐트를 생성
intent.setData(Uri.parse("tel:0102341234"));
// 0102341234번 전화번호를 데이터로 설정
startActivity(intent);
// 인텐트를 시작

# 액티비티로부터 결과받기

- 서브 액티비티로부터 결과를 받아야 하는 경우가 있음

- 이런 경우에는 startActivity()가 아닌 startActivityForResult()를 호출해서 서브 액티비티를 시작하여야 함

- 서브 액티비티가 결과를 보내면 메인 액티비티의 onActivityResult() 콜백메소드가 호출됨

 

- 전체적인 구조

...
public class MainActivity extends AppCompatActivity{
	...
    // 서브 액티비티를 시작
    Intent in = new Intent(MainActivity.this, SubActivity.class);
    startActivityForResult(in, COMMAND);
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
    	... //여기서 값을 전달 받음
    }
}

 

- 서브 액티비티가 보내는 결과값은 인텐트 객체 안에 있는 엑스트라(extras)필드를 이용하여 전달됨

- 엑스트라 필드는 Bundle 타입의 객체로서 데이터를 "이름과 값"의 쌍으로 저장

- 엑스트라 필드에 값을 저장할 때는 putExtra()를 사용

- 엑스트라 필드에서 값을 추출할 때는 getIntExtra() 메소드 사용


# 멀티 태스킹

- 동시에 여러 태스크를 실행

- 현재의 태스크를 배경으로 보내고 다른 태스크를 전경에서 시작할 수 있음

- 이전에 실행한 화면은 배경 태스크로 넘어감

- 스택의 후입선출로 기존의 화면이 삭제되지 않고 스택에 쌓여있음

 

# 오버뷰 화면

- 최근에 사용된 액티비티들과 태스크들을 보여주는 화면

 

# 액티비티 생애주기

- 실행상태

: 액티비티가 전경에 위치하고 있으며 사용자의 포커스를 가지고 있음

- 일시멈춤 상태

: 다른 액티비티가 전경에 있으며 포커스를 가지고 있지만 현재 액티비티의 일부가 아직도 화면에서 보이고 있는 상태

- 정지 상태 

: 액티비티는 배경에 위치함

 

# 중요한 콜백 메소드

* onCreate()

- 액티비티가 생성되면서 호출

- 중요한 구성 요소들을 초기화

* onPause()

- 사용자가 액티비티를 떠나고 있을 때, 이 메소드가 호출

- 그 동안 이루어졌던 변경사항을 저장

'Programming > Mobile' 카테고리의 다른 글

[안드로이드스튜디오] 서비스와 방송수신자  (0) 2021.10.03
[안드로이드스튜디오] 액티비티로부터 결과받기  (0) 2021.09.12
[안드로이드스튜디오] 여러페이지로 구성된 애플리케이션 작성  (0) 2021.09.12
[안드로이드스튜디오] 명시적 인텐트 - 두개의 액티비티로 이루어진 애플리케이션  (0) 2021.09.11
[안드로이드스튜디오] 액티비티  (0) 2021.09.11
'Programming/Mobile' 카테고리의 다른 글
  • [안드로이드스튜디오] 서비스와 방송수신자
  • [안드로이드스튜디오] 액티비티로부터 결과받기
  • [안드로이드스튜디오] 여러페이지로 구성된 애플리케이션 작성
  • [안드로이드스튜디오] 명시적 인텐트 - 두개의 액티비티로 이루어진 애플리케이션
min_sol
min_sol
  • min_sol
    비글개발연구소🐾
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (128)
        • Algorithm (52)
        • JAVA (40)
        • GIS (5)
        • PyQt (10)
        • C# (11)
        • Mobile (6)
        • AI (4)
      • Backend (36)
        • Spring (14)
        • JSP (11)
        • Network (5)
      • Frontend (29)
        • React (11)
        • Vue (13)
        • Next.js (4)
      • Database (10)
        • PostgreSQL (1)
        • Oracle (8)
        • Elasticsearch (1)
      • DevOps (8)
        • Linux (7)
        • Mac (1)
      • Tools (31)
        • IntelliJ (1)
        • GitHub (10)
        • RPA (20)
      • Security (9)
      • etc (21)
        • ERROR (5)
        • 세미나 | 교육 (10)
        • 자격증 (1)
        • 일상 (2)
        • 2021 (2)
  • 인기 글

  • 태그

    Java
    코딩테스트
    연습문제
    RPA
    spring
    자바
    PyQt
    PyQt5
    VUE
    알고리즘
    자동화
    자료구조
    백준
    jsp
    이클립스
    vue.js
    명품자바에센셜
    생능출판
    계산기
    스윙
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[안드로이드스튜디오] 인텐트
상단으로

티스토리툴바