Inflation이란?

  • XML 레이아웃게 정의된 정보를 메모리에 객체로 만드는 객체화 과정
  • ID를 지정하여 이 ID를 이용해 자바 코드에서 객체를 찾음


아래와 같이 layout 하위에 'screenview.xml'이 있을 때


이렇게 Inflation 할 수 있다.

// Layout inflation
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.screenview, this, true);


Fragment란?

간단하게 말하면 미니 액티비티라고 생각할 수 있다. 안드로이드가 아이폰과 구별되는 가장 큰 특징은 기기마다 화면의 크기가 다르다는 점이다. 더 나은 사용성을 위해 한 화면에 서로 독립적인 인터페이스 구성요소들을 결합하는 경우도 종종 있고, 더욱이 태블릿의 경우는 화면이 크기 때문에 일반적인 안드로이드폰의 개발과는 UI 디자인 및 UI의 흐름이 달라질 수밖에 없다. 

프래그먼트는 개발자가 간단하게 액티비티의 화면을 분할해서 내용을 구성할 수 있게 한다. 아래 그림은 프래그먼트의 개념도이다.

위와 같이 만들어진 프래그먼트는 태블릿에서는 하나의 액티비티 안에서 사용되며 스마트폰의 경우에는 액티비티에서 프래그먼트가 사용된다.

Activity란?

  • 사용자 인터페이스를 가진 화면을 나타낸다
  • 하나의 액티비티는 하나의 화면을 나타내기 때문에 여러 개의 화면으로 구성된 응용프로그램은 여러 개의 액티비티로 구성되어 있다고 볼 수 있다
  • 새로운 액티비티를 생성할 때 requestCode를 함께 전달하는데, 다수의 액티비티를 생성할 때 해당 코드로 액티비티를 구분할 수 있다

서비스(Service)란?

  • 백그라운드에서 장기적으로 실행되기 위해 구현되는 구성 요소


내용 제공자(Content Provider)란?

  • 어플리케이션 사이에서 Data 를 공유하는 컴포넌트
  • 안드로이드 OS에서는 콘텐트 프로바이더를 이용해서 SQLite와 같은 데이터베이스에 접근할 수 있도록 하고 있다. 이뿐만 아니라 콘텐트 프로바이더를 통해 다른 응용프로그램에서 데이터를 읽거나 쓸 수 있다.
  • 안드로이드 시스템에서는 기본적으로 몇 가지 응용프로그램에 대해 콘텐트 프로바이더가 준비돼 있다. 예를 들어 주소록이나 메모장 같은 경우가 될 수 있다.
  • 자세한 내용은 여기


브로드캐스트 수신자(Broadcast receiver)란?

  • 안드로이드 시스템 전체에서 오는 브로드캐스트 공지사항에 대해 응답하거나 공지사항을 전송할 수 있는 구성요소이다. 예를 들어 화면이 꺼졌다고 공지사항이 전송된다면 응용프로그램에서는 상응하는 작업을 수행할 수 있고, 응용프로그램이 어떤 작업을 할 경우 이 작업이 다른 응용프로그램에게 영향을 미친다면 이를 공지사항으로 전송할 수 있다. 브로드캐스트 리시버의 경우 사용자 인터페이스에 표시되지 않지만, 이벤트가 발생했을 경우에 사용자에게 알려주기 위해서 별도의 노티피케이션을 날릴 수 있다.

안드로이드 어플리케이션의 구성요소에 대한 자세한 내용은 여기


Tack, Activity Stack, Affinity, Flag란?

액티비티와 태스크

ANR(Application Not Responding)이란?

안드로이드 시스템은 일정 시간동안 응답이 없는 APP에 대해 ANR라 불리는 대화 상자를 사용자에게 보여줘서 방어한다.

사용자는 APP을 바로 종료 할 수도 있고 APP의 응답을 기다릴 수도 있다("Wait" button을 눌러서...).


원인

  • APP이 사용자 입력에 응답할 수 없다는 시스템의 판단
  • Activity Manager와 Window Manager 시스템 서비스의 모니터링에 다음 조건 중 하나가 감지될 경우:
    • 입력 이벤트에 5초 이내 반응이 없을 경우
    • BroadcastReceiver가 10초 이내 실행 완료되지 않을 경우

Load가 걸리는 작업일 경우 thread를 생성하여 백그라운드에서 작업을 해야 한다.


Intent란?

사전에서의 뜻과 같이 내가 하고자 하는 행위를 의미한다. intent를 사용하여 App 구성요소 간에 데이터를 전달하거나 실행하기를 원하는 기능이 무엇인지 시스템에 알려줄 수 있다.

 

인텐트에 대한 자세한 내용은 여기


명시적 인텐트(Explicit Intent)

  • 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우
  • e.g.>Intent ExplicitIntent = new Intent(getApplicationcontext(), FooActivity.class);


암시적 인텐트(Implicit Intent)

  • 액션과 데이터를 지정하긴 했지만 호출할 대상이 달라질 수 있는 경우
  • e.g.>Intent ImplicitIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://lazineer.tistory.com"));

인텐트 해석(Intent Resolving)
  • 인텐트 객체 내의 여러 정보들을 바탕으로 가장 적절한 컴포넌트를 찾는 과정

인텐트 필터(Intent Filter)
  • 인텐트 해석(Intent Resolving) 과정에서 인텐트 객체의 정보와 각 컴포넌트의 정보를 비교하게 되며, 이을 위해 각 컴포넌트는 자신이 받을 수 있는 인텐트의 종류를 메니페스트 파일에 정의하는 행동
  • 자세한 설명


Composite Pattern이란?

객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체(composite)를 똑같은 방법으로 다룰 수 있다.


아래는 Menu와 MenuItem을 똑같이 다루기 위해 Composite Pattern을 사용한 구조




Iterator Pattern이란?

컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공


아래는 Waitress 클래스가 Iterator 인터페이스를 사용하여 MenuItem 항목에 접근하는 구조를 보여준다.



Decoration Pattern이란?

객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터를 사용하면 서브 클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다.


아래는 Beverage 클래스, CondimentDecorator 추상 데코레이터와 이를 상속받은 Soy, Whip, Mocha 및 SteamMilk 데코레이터를 보여준다. StarbuzzCoffee 클래스에서 이들을 연동한다.



이클립스 테마 변경

+ Recent posts