2. 기본적인 Activity 호출
다른 Activity를 시작하라고~
단 나는 잊어버리고~
갈 땐 가더라도,
어디로 어떻게 갈거구.
새로 가는 곳 주인장에게 전해줄 것 좀 챙겨줄께
3. Intent .. 구조 An intent is an abstract description of an operation to be performed
기본 구조는 Action과 Data로 구성
• Action: 어떤 operation이 이루어지면 좋겠다는 것을 규정
• Data: operation이 수행되는데 참고되었으면 하는 데이터에 대한 URI
예) ACTION_VIEW | content://contacts/people/1
1이라는 값으로 규정이 되는 People에 대한 정보를 보여주라는 Intent
이렇게 정의되는 기본 Intent에 대해서는 Intent-filter로 상징되는 intent resolution을 통해서 처리가 되
어가게 됩니다. 이에 대해서는 추가로 알아가도록 합니다.
위 기본 정보 외에 다음 정보들을 포함
• Category: 수행되는 Action에 대한 추가 정보. 예) CATEGORY_LAUNCHER
• Type: intent data가 가지는 mime 타입 정보. 예) image/jpeg
• Extras: 추가적인 정보들의 묶음(bundle).
• Flags: 수행될 때, 참조가 될 수 있는 일정 패턴들에 대한 정의값.
예) FLAG_ACTIVITY_NO_HISTORY: UI 스택 상에서 사라지게 하기
4. 명시적 호출
앞서 살펴본 기본 구조 외에 Component라는 것이 있습니다. 이는 명시적으로 선언이 되지 않으면
null로 설정이 됩니다. 그리고 이 값을 제외한 값들을 조합해서 Intent가 향해야 할 곳이 결정됩니
다. 이것이 바로 암묵적 호출 / intent filtering 입니다.
그러나 이 값이 명시적으로 지정되면, intent에 있는 다른 값들을 고려하지 않고 지정된
component에 의해서 Intent가 수행되게 됩니다. 이것이 명시적 호출이라고 불리는 방법입니다.
위와 같이 다른 Activity를 수행을 요청하고 마치는 경우가 있는가 하면,
추가적으로 새로이 수행이 되는 Activity에서 처리한 결과를 받고자 하는 경우가 있습니다. 이
러한 경우에 다음과 같은 함수를 사용합니다.
public void startActivityForResult (Intent intent, int requestCode)
intent: 새로이 수행될 operation에 대한 정보 담은 intent
requestCode: 현재 요청하는 요청을 인식할 수 있는 값. 여러 요청 보낼 수 있는 경우 대비
5. startActivityForResult
A activity B activity
startActivityForResult () + requestCode
onActivityResult(int requestCode, int resultCode, Intent intent)
setResult & finishExtra
단순히 화면으로 전환하고 마치는 것이 아니라,신규 화면이 동작을 마치고 전환 값을 받는 호출
활용 예) 사용자 가입을 할 때, 해당 사용자가 Valid한 사용자인지 확인하는 화면
B activity가 Crash가 발생될 때에는 resultCode 값이 RESULT_CANCELED 반환 됨.
7. LifeCycle과 onActivityResult
A B
가. onClick
나. onActivityResult
A에서 startActivityForResult로 B를 호출 경우
A의 LifeCycle과 onActivityResult 순서 사이
1. A에서 버튼 onClick에서 B를 startActivityForResult
2. A.onPause
3. A.onStop
4. B에서 동작 마치고 finish 처리
5. A.onActivityResult 호출
6. A.onResume
위와 같은 순서로 A의 생명 주기가 호출됩니다.
8. Implicit Intent & Intent Filter
직접적으로 수행 대상을 규정하지 않고 처리 가능한 대상을 찾아서 수행하게 하는 것이 implicit intent 입니
다. 그런데 이런 방법을 왜 쓸까요?
다른 App을 활용할 수 있는 여지를 공개
지정된 특정 App만 처리할 수 있도록 하는 것이 아니, 처리 가능한 App들이 이를 처리할 수 있도록 공개하
는 용도. 예를 들어서 이미지를 보는 App을 선택해서 사용할 수 있도록 해주는 통로
Intent를 처리가 가능한 대상을 추출해 내는 과정을 intent resolving 과정이라고 하고, 이를 현재는
manifest 파일에 정의된 intent-filter를 통해서 수행하고 있습니다.
필터 기준