=================================
=================================
=================================
출처: http://www.tuning-java.com/32
안드로이드는 4개의 블록(block)으로 구성된다.
- Activity
- Intent Receiver
- Service
- Content Provider
근데 왜 블록이라고 하는지는 잘 모르겠다.필요한 컴포넌트를 추가할 경우에는 반드시 AndroidManifest.xml 이라는 파일에 추가하여 작업을 해야한다.
그럼, 가장 먼저 Activity 에 대해서 알아보자.액티비티는 이미 헬로월드를 테스트할때 확인을 했었다. 기억이 그새 나지 않는다면, '직접 헬로월드 만들기'를 참조하기 바란다. 그럼 액티비티는 뭘까? 액티비티는 쉽게 다음과 같이 정의할 수 있다.각각의 화면을 구성하기 위해서는 각각의 액티비티 클래스가 있어야 한다. 그러므로, 모든 안드로이드 프로그램에는 반드시 액티비티가 있어야 겠지요?
Intent 와 Intent Filteraction에서 사용되는 일반적인 값은 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() 를 호출하여 인텐트를 전달하죠!
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
백그라운 작업자Thread 이용하기 (0) | 2011.07.01 |
---|---|
About Android Sticky Broadcast Intent( 안드로이드 끈적 끈적한 인텐트에 관하여) (0) | 2011.06.30 |
안드로이드 UI 업데이트와 쓰레드 Handler (1) | 2011.06.30 |
안드로이드 스크린 키보드 특정 키 입력 막기 (0) | 2011.06.29 |
안드로이드 WebView 의 html 코드 직접입력해서 android_asset 폴더내에 이미지 파일 링크보여주기 (0) | 2011.06.29 |
댓글 영역