상세 컨텐츠

본문 제목

안드로이드의 구성 (Activity, Intent Receiver, Service, Content Provider) 관련

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2011. 6. 30. 17:20

본문

반응형

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: http://www.tuning-java.com/32

안드로이드는 4개의 블록(block)으로 구성된다.

  • Activity
  • Intent Receiver
  • Service
  • Content Provider
    근데 왜 블록이라고 하는지는 잘 모르겠다.
    필요한 컴포넌트를 추가할 경우에는 반드시 AndroidManifest.xml 이라는 파일에 추가하여 작업을 해야한다.

    그럼, 가장 먼저 Activity 에 대해서 알아보자.
    액티비티는 이미 헬로월드를 테스트할때 확인을 했었다. 기억이 그새 나지 않는다면, '직접 헬로월드 만들기'를 참조하기 바란다. 그럼 액티비티는 뭘까? 액티비티는 쉽게 다음과 같이 정의할 수 있다.
    각각의 화면을 구성하기 위해서는 각각의 액티비티 클래스가 있어야 한다. 그러므로, 모든 안드로이드 프로그램에는 반드시 액티비티가 있어야 겠지요?

    Intent 와 Intent Filter
    action에서 사용되는 일반적인 값은 MAIN, VIEW, PICK, EDIT 등이다. data는 일반적으로 URI로 표현된다.
    그래서 액티비티에서 사용하는 IntentFilter는 AndroidManifest.xml파일에 지정한다.

    그러므로 화면 사이의 이동은 intent를 지정해서 할 수 있다. 지정하는 방법은 startActivity(myIntent) 메소드를 호출하면 된다. 그런 다음 시스템에서는 모든 설치된 어플리케이션에 대한 인텐트 필터를 확인해서 myIntent와 가장 잘 맞는 찾아 낸 후 관련된 액티비티가 수행된다.
    • 액티비티를 재사용 할 수 있고
    • 액티비티는 언제라도 동일한 IntentFilter로 새로운 액티비티로 바뀔 수 있다.

    Intent Receiver
    인텐트 리시버는 UI 를 나타내지는 않고, NotificationManager라는 것을 사용한다. 인텐트 리시버도 AndroidManifest.xml파일에 지정해서 사용할 수 있지만, Context.registerReceiver() 메소드를 사용해서 등록할 수도 있다.

    Service
    그리고 기존에 수행되고 있거나 수행되지 않는 어플리케이션에 연결하는 경우에는 Context.bindService() 메소드를 호출하면 되고, 서비스에서 제공되는 인터페이스를 통해서 서로 커뮤니케이션도 가능하다.

    참고 : 이 내용은
    http://code.google.com/android/index.html
    의 내용을 참조하여 작성되었음.
  • 서비스는 UI 없이 수행되는 코드이다. 쉽게 이야기 하면 메일 수신 알림기나 안티바이러스, MP3 플레이어와 같이 백그라운드로 수행되는 작업을 처리하기 위해서 사용된다. 서비스를 사용하기 위해서는 Context.startService() 메소드를 수행하면 된다. 이 메소드가 수행되면, 시스템에서는 해당 작업이 끝날 때까지 작업을 멈추지 않는다.
  • 이 블록은 외부의 이벤트를 처리하기 위해서 사용된다. 뭐 전화가 오거나, 넷웍이 사용가능해 지거나 그럴때...
  • 이러한 프로세스를 거치면 장점은 다음과 같다.
  • IntentFilter 라는 클래스는 Intent가 뭔가를 호출할 때, IntentFilter는 어떤 액티비티와 인텐트 리시버인지에 대한 설명이라고 볼 수 있다.
  • 안드로이드에서는 스크린이 이동할때 Intent라는 특별한 클래스가 호출된다. Intent 데이터 구조에는 action과 data라는 중요한 내용이 있다.
  • 그래서 하나의 추가적인 화면이 열리면, 그 화면을 호출한 화면은 일시 정지 상태로 변하게 되고, 이전 화면은 history stack에 쌓이게 된다.
  • 액티비티 = 한 화면
  • Activity
  • 여하튼 모든 블록이 필요하진 않다고 이야기는 하는데, 몇몇가지의 조합으로 어플리케이션이 구성 가능하다고 한다.




 

=================================

=================================

=================================

 

 

출처:
 

출처 : http://multi-core-dump.blogspot.com/2010/04/android-application-launch.html





컴포넌트 활성화 - 인텐트

컨텐츠 프로바이더는 컨텐츠 리볼저의 요청 대상이 될 때 활성화가 됩니다.
그것을 제외한 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() 를 호출하여 인텐트를 전달하죠!

 

 

=================================

=================================

=================================

 

 

 

반응형


관련글 더보기

댓글 영역