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

  • Activity
  • Intent Receiver
  • Service
  • Content Provider

    근데 왜 블록이라고 하는지는 잘 모르겠다.

    여하튼 모든 블록이 필요하진 않다고 이야기는 하는데, 몇몇가지의 조합으로 어플리케이션이 구성 가능하다고 한다.

    필요한 컴포넌트를 추가할 경우에는 반드시 AndroidManifest.xml 이라는 파일에 추가하여 작업을 해야한다.


    그럼, 가장 먼저 Activity 에 대해서 알아보자.

    Activity

    액티비티는 이미 헬로월드를 테스트할때 확인을 했었다. 기억이 그새 나지 않는다면, '직접 헬로월드 만들기'를 참조하기 바란다. 그럼 액티비티는 뭘까? 액티비티는 쉽게 다음과 같이 정의할 수 있다.

    액티비티 = 한 화면

    각각의 화면을 구성하기 위해서는 각각의 액티비티 클래스가 있어야 한다. 그러므로, 모든 안드로이드 프로그램에는 반드시 액티비티가 있어야 겠지요?

    그래서 하나의 추가적인 화면이 열리면, 그 화면을 호출한 화면은 일시 정지 상태로 변하게 되고, 이전 화면은 history stack에 쌓이게 된다.


    Intent 와 Intent Filter

    안드로이드에서는 스크린이 이동할때 Intent라는 특별한 클래스가 호출된다. Intent 데이터 구조에는 action과 data라는 중요한 내용이 있다.

    action에서 사용되는 일반적인 값은 MAIN, VIEW, PICK, EDIT 등이다. data는 일반적으로 URI로 표현된다.

    IntentFilter 라는 클래스는 Intent가 뭔가를 호출할 때, IntentFilter는 어떤 액티비티와 인텐트 리시버인지에 대한 설명이라고 볼 수 있다.

    그래서 액티비티에서 사용하는 IntentFilter는 AndroidManifest.xml파일에 지정한다.


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

    이러한 프로세스를 거치면 장점은 다음과 같다.

    • 액티비티를 재사용 할 수 있고
    • 액티비티는 언제라도 동일한 IntentFilter로 새로운 액티비티로 바뀔 수 있다.

    Intent Receiver

    이 블록은 외부의 이벤트를 처리하기 위해서 사용된다. 뭐 전화가 오거나, 넷웍이 사용가능해 지거나 그럴때...

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


    Service

    서비스는 UI 없이 수행되는 코드이다. 쉽게 이야기 하면 메일 수신 알림기나 안티바이러스, MP3 플레이어와 같이 백그라운드로 수행되는 작업을 처리하기 위해서 사용된다. 서비스를 사용하기 위해서는 Context.startService() 메소드를 수행하면 된다. 이 메소드가 수행되면, 시스템에서는 해당 작업이 끝날 때까지 작업을 멈추지 않는다.

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


    참고 : 이 내용은 http://code.google.com/android/index.html 의 내용을 참조하여 작성되었음.

  • Posted by tuning-java