2014년 3월 3일 월요일

[Android][번역] Intents and Intent Filters - 1

원문 : http://developer.android.com/guide/components/intents-filters.html

Intents and Intent Filters

Intent는 다른 app component에 기능을 요청 할 수 있는 메시징 객체이다.
비록 Intent가 components 간의 Communication을 가능 하게 하는 여러 방법이 있지만
세가지의 근본적인 사용 방법이 있다.

 - Activity 시작
Activity는 App에서 단일 화면을 표현해 준다. 새로운 Activity 객체를 시작할 땐 startActivity()로 Intent를 전달 해 준다. Intent는 Activity를 시작하기위한 설명과 필요한 데이터를 가지고 있다. 만약 새로 시작 한 Activity가 끝날 때 결과를 받고 싶다면 startActivityForResult()를 호출 하면 된다. 결과를 받고자 하는 Activity에서는 Intent 객체와는 별개로 onActivityResult() callback을 통해서 결과를 받을 수 있다.

 - Service 시작
Service는 UI가 없이 백그라운드에서 기능을 수행하는 Component이다.
Service에서 one-time operation(파일 다운로드와 같은) 기능을 startService()로 Intent를 전달 하여 시작할 수 있다. Intent는 Service를 시작하기위한 설명과 필요한 데이터를 가지고 있다. 만약 Service가 client-server 로 디자인 되어있다면, Intent를 bindService()를 통해 전달 하여 다른 app component와 묶을 수 있다.

 - Broadcast 전달
broadcast는 어떠한 App에서도 받을 수 있는 메시지 이다. 시스템은 시스템 전원 켜짐 또는 기기가 충전을 시작하는 등 과 같은 시스템 이벤트를 위한 여러가지 broadcast들을 전달 한다. broadcast는 sendBroadcast(), sendOrderedBroadcast() 또는 sendStickyBroadcast()로 Intent를 전달하여 다른 app에 broadcast를 전달 할 수 있다.


Intent Types

두 가지의 Intent 타입이 있다.

 - Explicit intents는 이름 (완전히 증명된 클래스 이름)으로 시작하는 component를 명시한다. 일반적으로 앱에서 explicit intent로 component를 시작한다, 시작 하고 싶은 Activity 또는 Service의 클래스 이름을 알기 때문이다. 예로, 사용자의 행동에 응답하는 새로운 Activity를 시작 하거나 백그라운드에서 파일을 다운받는 Service를 시작하는게 있다.

 - Implicit intents는 component의 이름을 명시하것이 아니라, 다른 app의 component가 기본적인 기능을 수행 할 수 있도록 허용하는 것이다. 예로, 만약 사용자의 위치를 지도에 표시 해 주고 싶다면 implicit intent로 지도에 구체적인 위치를 보여줄 수 있는 다른 app에 요청 하는 것이다.

Activity 또는 Service를 explicit intent로 생성 할 때, 시스템은 즉시 intent 객체에 명시 된 app component를 시작 한다.

implicit intent를 생성 할 때, 안드로이드 시스템은 기기의 다른 앱의 manifest 파일에 선언된 intent filter와 intent의 내용을 비교하여 적절한 component를 찾는다. 만약 그 intent가 intent filter와 일치 한다면 component를 실행하고 intent를 전달 해 준다. 만약 여러 intent filter와 호환이 된다면, 시스템은 사용자가 고를 수 있도록 실행 가능 한 목록을 보여준다.

intent filter는 app의 manifest 파일에 component가 받을 수 있는 intent 종류를 명시한 식(expression)이다. 나아가서 하나의 Activity에 intent filter를 선언 하면, 다른 app에서 intent filter에 명시한 종류의 intent로 intent filter가 선언된 Activity를 직접 실행 시키도록 만들 수 있다.  비슷하게 Activity에 아무런 intent filter를 선언하지 않으면 이 Activity는 explicit intent로만 실행 할 수 있다.



* 주의 : App의 보안을 보장하려면 항상 Activity 또는 Service를 시작하려면 explicit intent를 사용하고 Service에 intent filter를 선언하지 마라. implicit intent로 Service를 시작하는 것은 보안의 위험 요소이다. Service가 intent에 응답 할 것을 확신하지 못하고, 사용자는 Service가 실행되는것을 보지 못하기 때문이다.







댓글 없음:

댓글 쓰기