본문 바로가기

프로그래밍/안드로이드

컴포넌트 활성화 - 인텐트


컨텐츠 프로바이더는 컨텐츠 리볼저의 요청 대상이 될 때 활성화가 됩니다.
그것을 제외한 3가지의 컴포넌트 ( 액티비티, 서비스, 브로드캐스트 리시버 ) 는
인텐트 ( Intent ) 라는 비동기 메시지에 의해 활성화가 되죠.

인텐트는 컨텐츠 메시지를 가지고 있는 인텐트 객체입니다.
인텐트는 액티비티와 서비스에게 요청되는 액션을 가리키고,
그 액션은 처리해야하는 데이터의 URI 를 명시합니다.
( 브로드캐스트 리시버에게는 공지되는 액션을 가리킵니다. )

예를들어, 카메라 버튼이 눌러졌다 라는 이벤트가 발생하면 그것에 귀 기울이고 있던 관계자(party) 에게 공지하는 구조이죠.

각각의 컴포넌트에 대해 활성화 할 수 있는 별도의 메소드가 있습니다.

액티비티 활성화

액티비티는 인텐트 객체를
Context.startActivity()  또는

Activity.startActivityForResult()

의 파라미터로 전달함으로써 실행됩니다.




이것을 받는 액티비티는
getIntent()

메소드를 호출함으로써 실행하게 한 인텐트를 얻을 수 있습니다.



그런 후, 다른 인텐트를 전달하기 위해서는 그 액티비티의
onNewIntent()

메소드를 호출하면 됩니다.


하나의 액티비티는 다음번 액티비티를 실행하는 것이 대부분인데요,
이럴때 자신이 시작시킨 액티비티로부터 결과를 리턴받고자 한다면
startActivity() 대신에 startActivityForResult() 를 호출해야만 됩니다.

예를들어, 어떤 액티비티가 사용자에게 사진을 선택하게 하는 액티비티를 시작하고, 사용자가 선택한 사진을 리턴받아 처리하고 싶다면 그 결과는 액티비티의 onActivityResult() 메소드가 호출되는곳에 전달되는 인텐트 객체 내에서 리턴됩니다.


서비스 활성화

서비스는 Context.startService() 에 인텐트 객체를 파라미터로 전달함으로써 활성화가 됩니다.



그 뒤, 서비스의 onStart() 메소드를 호출하고 인텐트 객체를 전달합니다.
또한, 호출하는 컴포넌트와 대상이 되는 서비스간의 지속적인 연결을 위하여
Context.bindService() 메소드에 파라미터로 전달할 수 있습니다.



그렇게되면 해당 서비스는 onBind() 가 호출되는 곳에서 인텐트 객체를 받지요.

예를들어, 음악 재생 플레이어 같은 경우 서비스 컴포넌트를 써야하기 때문에,
액티비티는 음악재생 서비스와의 연결을 설정하기 위하여 bindService() 를 호출해야 됩니다.


브로드캐스트 리시버 활성화

브로드캐스트에는
Context.sendBroadcast() ,
Context.sendOrderedBroadcast(),
Conext.sendStickyBroadcast()
와 같이 다양한 메소드에 인텐트 객체를 전달하여 브로드캐스트를 만들 수가 있습니다.

그 뒤, 이것에 등록된 모든 브로드캐스트 리시버에게 onReceive() 를 호출하여 인텐트를 전달하죠!

 활성화의 내용은 여기가 끝입니다 ^^;;
다음 포스팅엔 컴포넌트 종료하기를.................................

출처 : http://underclub.tistory.com/270