인텐트
시스템이 알아 먹을 수 있는 포맷을 정의한 것이다.
화면을 실행하는 일은 안드로이드 시스템에서 담당하는데 인텐트는 시스템으로 전달되는 일종의 명령을 담고 있는 객체인 것이다.
즉, 이 인텐트 안에 들어있는 명령이나 데이터를 시스템에서 이해한 후에 시스템이 어떤 일을 해주게 된다.
인텐트의 기본 구성 요소는 액션(action)과 데이터(data) 이다.
액션은 수행할 기능이고 데이터는 액션이 수행될 대상의 데이터를 의미한다.
범주, 타입, 컴포넌트, 부가 데이터라는 인텐트 속성이 있다.
명시적 인텐트 vs 암시적 인텐트
- 명시적 인텐트
인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우
- 암시적 인텐트
액션과 데이터를 지정하긴 했지만 호출할 대상이 달라질 수 있는 경우
플래그
플래그는 액티비티 스택을 관리할 수 있는 인텐트 옵션이다.
플래그는 인텐트 객체의 addFlags 메소드와 setFlags메소드를 이용해 설정할 수 있다.
가장 많이 사용되는 플래그는 intent.FLAG_ACTIVITY_NEW_TASK | INTENT.FLAG_ACTIVITY_SINGLE_TOP | INTENT.FLAG_ACTIVITY_CLEAR_TOP 이다.
- FLAG_ACTIVITY_CLEAR_TOP
인텐트 플래그를 통해 호출하는 액티비티가 액티비티 스택에 이미 존재할 경우 호출하는 액티비트를 스택의 최상위로 올리면서 그 위에 있던 액티비티들은 전부 삭제한다.
- FLAG_ACTIVITY_SINGLE_TOP
기존에 만든 동일한 액티비티를 그대로 사용하게 된다.
같은 액티비티가 재사용되기 때문에 onCreate가 호출되지 않고 onNewIntent가 실행된다.
부가데이터
인텐트는 시스템을 통해 다른 액티비티로 전달될 수 있는데 액티비티뿐만 아니라 다른 애플리케이션 구성요소로도 전달될 수 있다.
애플리케이션 구성요소들 간에 데이터를 전달하는데 인텐트가 사용되는 것이다.
부가 데이터는 시스템에서 건드리지 않고 전달만 되며 인텐트 안에 번들 객체가 있어 그 안에 데이터를 넣고 빼는 것이다.
액티비티 A에서 액티비티 B를 실행하고 다시 액티비티 A로 돌아오는 과정
- 액티비티 A에서는 인텐트 객체를 만들고 putExtr() 메소드를 이용해 부가데이터를 넣어준다.
- startActivityForResult 메소드를 호출한다.
- 액티비티 B가 실행된 후 setResult 메소드를 호출하면서 인텐트를 전달하고 finish 메소드를 호출하면 액티비티 A로 돌아온다.
- 액티비티 B에서도 인텐트 안에 부가데이터를 넣어 전달할 수 있는데 이 인텐트는 액티비티 A의 onActivityResult 메소드가 호출되면서 전달받을 수 있다.
Uploaded by Notion2Tistory v1.1.0