1. Genymotion Download

2. Eclipse>Help>Install New Software

3. Work with란에 http://plugins.genymotion.com/eclipse 입력하고 엔터

4. Eclipse의 Genymotion 아이콘을 클릭하여 Genymotion 설치경로 설정


Genymotion player.exe 오류 시

Vertical LinearLayout 내에 Horizontal LinearLayout 두 개를 두고, 상단의 Horizontal LinearLayout엔 textview 2개와 button 1개를 배치하고 하단의 Horizontal LinearLayout엔 button 2개를 배치했다.

상단의 Horizontal LinearLayout 내의 각 view의 layout_weight 값을 1:1:1로 설정하고, 하단의 Horizontal LinearLayout 내의 각 view의 layout_weight 값은 2:1로 설정했다.

그리고 상하단 Horizontal LinearLayout 내의 모든 view의 layout_width 값을 wrap_content로 설정하고 실행해보니 아래와 같이 view가 배치되었다.



상단 Horizontal LinearLayout 내 textview 두 개의 끝과 하단 Horizontal LinearLayout 좌측 button 끝이 일치할거라고 생각했는데 이상하게도 차이가 있었다. padding 값 때문에 그런가 싶어서 좌우 padding 값을 0dp로 해보았으나 동일한 결과였다.

웹서칭을 해보니 view의 layout_width 값을 0dp로 설정해야되는거 같다. 그래서 그렇게 적용했더니 아래와 같이 예상했던 결과가 나왔다.



layout_width를 wrap_content로 하면 왜 첫 번째 그림과 같이 나오는지 모르겠다. ㅡㅡ;;

혹시 이 글을 보시는 분 중에 아시는 분 있다면 댓글 부탁드립니다.


View란?

  • Activity 내에 들어가는 각각의 구성요소
  • 컨트롤이나 위젯이라는 이름으로 불리는 UI 구성요소


ViewGroup

  • View를 여러 개 포함하고 있는 것
  • View와 ViewGroup은 Composite Pattern을 사용했음

Part_of__Android_View_Hierarchy.png (837×689)
그림1. 클래스 다이어그램

viewgroup.png (474×253)
그림2. Tree 구조를 갖는 UI 구성


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) 과정에서 인텐트 객체의 정보와 각 컴포넌트의 정보를 비교하게 되며, 이을 위해 각 컴포넌트는 자신이 받을 수 있는 인텐트의 종류를 메니페스트 파일에 정의하는 행동
  • 자세한 설명


+ Recent posts