다른 UI API와 동일하게 안드로이드도 레이아웃을 제공한다. 어떤 레이아웃들이 있는지 확인해 보자.

FrameLayout

FrameLayout은 가장 단순한 레이아웃 객체이다. 이 레이아웃은 위치를 지정할 수 없고, 모든 자식 요소들은 무조건~~~~ 좌측 상단 구석에 배치된다.


LinearLayout

이 레이아웃의 모든 자식 요소들은 단일 방향으로 배치된다. 즉 가로나 세로로 배치된다는 의미이다. 자세한 내용은 나중에 구현하면서 확인해보자.


TableLayout

이 레이아웃은 자식 요소들을 열이나 행에 배치시킨다. 하지만, 일반 표처럼 선을 기본적으로 표시하지 않는다. 그리고, 각각의 셀을 비운 상태로 유지할 수는 있지만, 열의 크기를 지정할 수 없다.


AbsoluteLayout

좌측 상단 구석을 (0,0)으로 시작하는 절대 위치로 요소들을 배치하는 레이아웃이다. 여백은 지원하지 않으며, 각각의 요소가 서로 겹치는 것은 허용되지만, 별로 권장하지는 않는다.


RelativeLayout

말 그대로 상대 위치를 지정하는데 사용된다.


중요한 뷰 그룹의 목록

중요한 뷰 그룹의 목록은 다음과 같다.

AbsoluteLayout : 앞에서 이야기 했다.

FrameLayout : 이것도 앞에서...

Gallery : 그림들의 목록을 보여주기 위한 뷰

GridView : m개의 열과 n개의 행을 갖는 뷰

LinearLayout : 이것도 앞에서 설명했다.

ListView : 스크롤 되는 단일 열의 목록을 보여주는 뷰

RelativeLayout : 이것도 앞에서.

ScrollView : 세로로 스크롤되는 요소의 열

Spinner : 바운드 목록 중 단일 아이템을 나타내는 뷰.(바운드 목록이 뭔지는 잘 모르겠다.)

SurfaceView : 직접 화면에 그릴 수 있는 접근을 제공하는 뷰. 최 상위 화면에는 레이어가 있는 자식 뷰를 가질수는 있으나, 위젯을 사용하지 않고 점 단위의 그림을 그릴때 사용된다.

TabHost : 다른 UI API와 같은 탭을 제공한다.

TableLayout : 앞에서...

ViewFlipper : 한개의 아이템을 한번에 보여주는 리스트 뷰이다. 슬라이드 쇼와 같이 각각의 아이템을 시간차를 두고 변경가능하다.

ViewSwitcher : ViewFlipper와 동일하다(그럼 왜만들었을까???)


(각각에 대한 내용은 아래의 참조 URL을 참조하기 바란다.)


이 내용은 http://code.google.com/android/devel/ui/layout.html 을 바탕으로 재구성 되었습니다.

Posted by tuning-java
,

안드로이드 애플리케이션의 기본 단위는 액티비티(android.app.Activity) 이다.  액티비티에서는 많은 일을 할 수 있지만, 액티비티 자체는 화면 내용을 담고 있는 것이 없다. 액티비티에서 화면을 구성하고 디자인하기 위해서는  안드로이드 플랫폼 UI 표현의 가장 기본단위인 view들과 viewgroup들을 사용해야 한다.


View

View는 android.view.View 클래스의 객체이다. 이 객체에는 기본적으로 레이아웃과 해당 뷰가 위치하는 지역(4각 지역)을 확인한다.

뷰 객체는 측정, 레이아웃, 포커스 변경, 스크롤, 스크린에서의 키 및 행위에 대해서 처리한다.

뷰 클래스는 widgets 클래스를 기반으로 제공된다. 위젯은 자신의 측정및 그리는 것에 대한 처리를 수행하기 때문에, UI를 보다 빠르게 그리고 사용할 수 있도록 해준다. Text, EditText, InputMethod, MovementMethod, Button, RadioButton, Checkbox, ScrollView 위젯이 이에 속한다.


Viewgroups

뷰 그룹은 android.view.Viewgroup 클래스의 객체이다. 이름이 의미하는데로, 뷰 그룹은 뷰나 다른 뷰그룹의 객체를 담고 관리하는 일을 한다. 단일 화면을 구성하는 복잡한 요소들을 포함할 수 있도록 도와주는 일을 이 클래스에서 담당한다.

layouts 라는 클래스에 기반을 두고 있다.


참고로 이 내용은  http://code.google.com/android/devel/ui/hierarchy.html 를 참조했으며, 각 뷰의 계층에 대한 나머지 설명은 이 URL을 참조하기 바란다.

Posted by tuning-java
,

대부분의 경우 안드로이드는 자신의 리눅스 프로세스 내에서 수행된다.

애플리케이션 프로세스의 라이프타임은 애플리케이션 자신에 의해서 콘트롤되지 않고, 시스템에 의해서 관리된다.

애플리케이션의 컴포넌트(앞서 배운 액티비티나 서비스 같은 것들)가 어떻게 각각 어떻게 다른지를 이해하는 것은 굉장히 중요하며, 이 컴포넌트들을 제대로 사용하지 않을 경우 시스템이 중요한 일을 할때 시스템이 죽어버릴 수도 있다.

프로세스 라이프 사이클의 버그중 가장 일반적인 것은 IntentReceiver를 onReceiveIntent() 메소드 호출을 통해서 시작하는 경우이다. 이렇게 시작하게 되면, 시스템에서는 IntentReceiver가 더이상 유효하지 않다고 생각하게되고, 해당 프로세스는 언젠가 시스템에 의해서 죽을 수도 있다. 이러한 실수를 방지하기 위해서는 Service를 IntentReceiver를 사용해서 시작해야한다 그러면, 작업을 수행하는 동안 해당 작업은 계속 일을 하고 있다는 상태를 시스템이 알 수 있게 되기 때문이다.


메모리가 부족할때 어떤 프로세스가 죽어야하는지에 대해서 정의하는 것은 "중요도 순서(Importance hierarchy)"에 의해서 결정된다. 중요도의 순서는 다음과 같다.

각각의 내용에 대해서는 http://code.google.com/android/intro/lifecycle.html 를 참조하기 바란다.

  1. foreground process
  2. visible process
  3. service process
  4. background process
  5. empty process

프로세스를 분류를 정의할때, 현재 살아있는 프로세스중에서 시스템은 가장 중요한 레벨을 선택한다. Activity, Serivce, IntentReceiver 문서를 보면 어떻게 각각의 컴포넌트가 전체 프로세스의 사이클에서 사용되는지를 자세하게 알 수 있다.


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

Posted by tuning-java
,

참고로 이 설명은 [Blog2Book 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기] 책을 읽는 독자분들이 부록으로 제공되는 DevPartner for Java를 보다 쉽게 사용할 수 있도록 작성되었으며, 설치시 14일간 기능의 제한이 없는 임시 라이센스가 생성됩니다.


DevPartner for Java (이하 DevPartner)를 윈도우즈 기반에서 설치하는 방법은 매우 간단하다.


DevPartner를 설치하기 위해서는 설치 디렉토리에 있는 Setup.exe 파일을 실행하면 다음과 같은 화면이 나타나고, 여기서 install Compuware DevPartner를 선택하면 된다.

기본적인 설치 방법은 여타 다른 툴들과 비슷하기 때문에 생략하고, 중간에 Integrate DevPartner Java Edition with your IDE 와 다른 옵션을 선택하는 부분이 있다. 다른 옵션은 선택하지 않는 것이 좋고, 만약에 eclipse와 같은 툴에서 사용하기 위해서는 Integrate... IDE를 체크하여 eclipse의 경로를 지정하면 된다.


모든 설치가 완료되면 "반드시" PC를 재기동 해야한다. 윈도우용 설치파일만 제공되기 때문에 Linux나 Unix에서 설치하는 방법에 대해서는 여기서 다루지 않겠다.


PC를 재기동 한 이후에 자동으로 DevPartner 초기화면이 기동될 것이다.


다음부터 이 초기화면으로 이동하기 위해서는 윈도우의 시작 -> 프로그램 -> Compuware DevPartner Java Edition -> DevPartner Java Edition을 선택하면 이 화면으로 이동할 수 있다.



이 화면이 정상적으로 나타난다면 제대로 설치가 된 것이다.

나는 그렇지 않은 경우가 없어서 그렇지 않은 경우에 어떻게 하냐고 물어보셔도 모르니 참조해 주기 바란다.

(기본적으로 자바가 설치 되어 있어야 하며, 현재 제공되는 프로그램의 경우에는 JDK 6.0이 지원되지 않는 것으로 알고 있다. 사용하려면 JDK 5.0을 설치하여 사용하기 바란다.)


첫 화면이 나타나면 눈치를 챈 분들도 있겠지만, 내부적으로 톰캣 서버를 기동하여 그 톰캣 서버에서 작업을 수행하는 구조로 되어 있다.


설치 단계의 마지막으로 한가지 팁을 알려드리면, 이 툴의 경우 관련된 서비스가 항상 실행되도록 되어 있기 때문에 해당 서비스를 자동이 아닌 수동으로 수행될 수 있도록 변경해 주어야만 한다.

윈도우 시작 -> 설정 -> 제어판 -> 관리도구 -> 서비스를 선택하면 아래와 같은 화면이 나타날 것이고, 여기서 잘 찾아보면 Compuware 어쩌구 저쩌구하는 것이 있는 것을 확인할 수 있다.


해당 줄을 더블클릭하면 다음과 같은 화면이 나타난다.

여기서 중간에 있는 자동을 수동으로 변경하고 확인을 누르면 이제부터 시작할때 마다 DevPartner가 시작되지 않는다.

Posted by tuning-java
,
Posted by tuning-java
,
SWT기반으로 개발하다보면 이것 저것 API가 생소하여

막히는 부분이 많이 생긴다.

http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm

이 사이트의 샘플을 통해서 각 API의 사용법을 익힌다면,

SWT는 쉽게 개발할 수 있다.
Posted by tuning-java
,
http://java.sun.com/docs/books/tutorial/index.html

자바 튜토리얼 홈페이지다.

쉽게 찾을수 있는 페이지가 아니라 링크를 정리해 본다.
Posted by tuning-java
,
JMX를 사용하는 모든 자바 기반의 어플리케이션을 모니터링 할 수 있는 툴이 JConsole이다.
물론 무료이며, JDK 5.0 이상을 설치하면 자동으로 수행 디렉토리(bin)에 해당 파일이 존재한다.

Using JConsole to Monitor Applications

http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html


Posted by tuning-java
,

http://www.hp.com/products1/unix/java/infolibrary/prog_guide/hotspot.html#-Xeprof

HP의 JVM Option이 정리되어 있는 링크이다.

나중에 유용하게 사용되길...

Posted by tuning-java
,

http://www.ibm.com/developerworks/kr/library/j-jtp09275.html

IBM에서 작성한 성능과 관련된 문서.

Java의 성능과 관련된 내부 구성이 어떻게 되는지를 확인할 수 있는 좋은 문서

이 사이트는 한글로 구성되어 있기 때문에,

영어 울렁증이 있는 분들에게도 많은 도움이 될 것이다.

Posted by tuning-java
,
Posted by tuning-java
,



Java Performance Tuning 웹 사이트 http://www.hp.com/dspp에 가서
“Performance Tuning Java”검색

Java 관련 hp 제품 http://www.hp.com/go/java

Posted by tuning-java
,
 
이 링크 따라 가면 Sun에서 발표한 자료들과
 
고민하고 있는 내용들을 알 수 있음.
Posted by tuning-java
,
Blog2Book 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기가 출간되면서 새롭게 시작되는 블로깅.

사용자 삽입 이미지


Posted by tuning-java
,