안드로이드

인텐트에 대한 개념 및 구현 방법

소혜아빠 2017. 3. 3. 16:50

1. 인텐트


핸드폰 어플리케이션을 사용할 때마다 버튼을 누르면 다른 화면이 뜨는 것은 당연하다는 듯이 생각해왔다. 이런 동작을 하기 위해서 사용되는 것이 바로 인텐트(Intent)라는 매커니즘이다. 하나의 액티비티에서 다른 액티비티를 시작하려면 액티비티의 실행에 필요한 여러가지 정보들을 보내주어야 하는데, 이 때 사용하는 메세지가 인텐트이다.


2. 인텐트의 종류


 1) 명시적 인텐트

명시적 인텐트에서는 타깃 컴포넌트의 이름을 지정한다. 다시 말해서 "어플리케이션 A의 컴포넌트 B를 구동하여라."와 같이 명확하게 지정하는 것이다. 흔히 동일한 어플리케이션 내에 있는 다른 액티비티를 실행할 때 사용된다.


Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);

위의 간단한 코드는 인텐트 객체를 선언한 뒤 현재 액티비티에서 NextActivity라는 이름의 액티비티를 지정한다는 뜻이다.

startActivity(intent)는 intent 객체에 기술된 액티비티를 시작한다는 뜻이다.


 2) 암시적 인텐트

암시적 인텐트에서는 명시적 인텐트와는 반대로 타깃 컴포넌트의 이름을 지정하지 않는다. 대신 암시적으로 컴포넌트를 지정한다. 예를 들면 "지도를 보여줄 수 있는 컴포넌트이면 어떤 것이라도 좋다."와 같다. 암시적 인텐트는 일반적으로 다른 어플리케이션의 컴포넌트를 구동하는 데에 사용된다.

Intent i = new Intent("arabiannight.tistory.com.intentfilter.secondview");
startActivity(i);

암시적 인텐트를 사용하는 방법은 명시적 Intent 처럼 지정된 곳을 호출 하는 게 아니라 Intent에 (action)을 추가해서 보내고 싶은 명령을 보내는 것이다. 물론 보내고 싶은 명령을 받아야 할 곳에는 intent에서 보낸 (action)값을 추가해 주어야한다.


3. 인텐트 필터


인텐트 필터의 기능은 위의 그림과 같이 무수히 많은 intent들이 다른 컴포넌트들에게 메시지를 보내지만, 호출을 받는 컴포넌트의 intent filter에 호출한 intent의 action 값이 정의 되어 있어야 통과 할 수 있다. 그래야 해당 intent를 컴포넌트에 전달하게 되고, 해당 컴포넌트는 intent에 실려온 메시지를 받아 작업을 수행 할 수 있게 되는 것 이다.