안드로이드 시스템에서 컴포넌트 간의 호출과 메시지 전달에 사용된다.


인텐트를 통해 화면을 전환하거나 값을 전달할 수 있다.


호출될 대상을 명시하냐 아니냐에 따라 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent)로 나누어진다.


명시적 인텐트(Explicit Intent)


말 그대로 호출될 컴포넌트를 명시한다.


만약 호출한 컴포넌트가 반환된 뒤 값을 받아오고 싶다면, startActivity() 대신에 startActivityForResult()를 사용한다. 그 후, 콜백 함수인 onActivityResult()를 오버라이드하여 반환된 값을 사용할 수 있다.


암시적 인텐트(Implicit Intent)


호출할 컴포넌트를 명시하지 않는 대신, 호출 대상 컴포넌트의 속성을 정의한다.


여기에는 Action, Category, Tpye 등이 있다.


Action은 말 그대로 호출된 컴포넌트가 수행할 동작이고, Category는 이 Action을 좀 더 보충해주는 설명이라고 보면 된다.


컴포넌트가 처리하기를 원하는 데이터들은 주소록, 사진, 텍스트 등 여러 종류가 있는데, 이는 Type에서 정의된다. 이 때 전달되는 데이터는 URI 형식으로 정의되어 있으며, 주소를 전달한다.


이 외에 직접 전달할 데이터가 있다면 putExtra() 등을 사용하면 된다.



Intent Filter


암시적 인텐트를 사용할 때 적용되며, AndroidManifest의 intent-filter라는 태그 내에서 정의할 수 있다. 


사용되는 필터로는 action, category, data, type 등이 있다. 



Task(Activity Stack)


인텐트를 사용하여 다른 액티비티들을 호출하다가, 다시 Back 키를 누르면 이전에 사용했던 액티비티들이 보인다. 이는 Task 라는 곳에 스택 형식으로 액티비티가 쌓이기 때문이다.


이러한 Task는 메모리 상에 여러 개가 존재할 수 있으며 서로 독립적이다.


가장 아래에 있는 액티비티를 Root Activity라고 하며, 가장 상단에 있는 액티비티가 현재 사용자와 상호작용하고 있는 액티비티이다.


이렇게 순차적으로 쌓이는(stack) Task에서, 순서를 바꾸거나 제어 등을 하고 싶다면 Intent 객체에서 Flag를 설정하면 된다.



Flag


이 Flag를 사용하여 Task 내 액티비티의 흐름을 제어할 수 있다. AndroidManifest나 소스 코드에서 직접 설정할 수 있다.


Flag에는 여러 종류가 있으며, 자세한 내용은 알아서 찾아보자. 엄청 많다.



참고


- 인텐트(Intent)란 무엇인가?

- 어플리케이션 컴포넌트의 실행 : 인텐트(Intent)


- 내가 누군지 말해줘! - 인텐트 필터(Intent Filter)


- 액티비티와 태스크(Task)


[Android] Activity 생성시에 사용되는 Intent Flag 정리

안드로이드 Intent Flag 정리(Activity 관리)

블로그 이미지

NCookie

,