Collection 인터페이스는 원소들을 배열로 변환하는 toArray() 메소드를 제공합니다. 사용 시 주의할 점은 Collection 인터페이스를 상속한 객체의 원소와 동일한 형으로 변환할 경우 배열 객체를 생성하고 생성한 배열 객체를 toArray() 메소드의 인자값으로 넘겨주어야 한다는 것입니다. 아래의 코드를 보시면 확실히 이해하실 수 있으실 겁니다.
  
Vector v = new Vector();
v.add("hello");
v.add("hi");


//1. Object[] 배열로 받는 방법
Object[] obj = (Object[])v.toArray();


//2. 원소와 동일한 형으로 받는 방법
String[] arr = (String[])v.toArray(); //이렇게하면 ClassCastException 발생

String[] arr = new String[v.size()]; //이렇게해야 동일한 원소형의 배열로 받을 수 있음
arr = (String[])v.toArray(arr); 


출처 : 데브포유

'Java' 카테고리의 다른 글

Collection 인터페이스의 toArray() 메소드 사용하기  (3) 2011.12.21
Posted by 플라스틱라디오

플래그먼트의 등장 배경  

안드로이드 3.0(허니콤)이 공개되면서 태블릿에 적합한 여러 UI들이 공개되었는데, 그 중에서 대표적인 것이 바로 플래그먼트(Fragment) 입니다. 플래그먼트는 태블릿과 같은 큰 화면을 가지는 단말에서 애플리케이션이 화면을 더 효율적으로 활용할 수 있도록 도와 줍니다.

기존에는 애플리케이션 화면을 구성하는 큰 틀이 액티비티(Activity) 하나였고, 이 안을 여러 뷰로 구성하여 정보를 표시하고, 상호 작용을 수행했습니다. 그런데, 뷰만을 사용해서 다양한 내용을 보여주기는 매우 어려웠습니다. 특히나 전체적인 UI 틀은 고정되어 있으면서 특정 부분만 변화하며 다른 내용을 표시하도록 하려면 매우 복잡한 구성이 필요했고, 서로 다른 역할을 하는 코드들이 같은 곳에 있게 되어 가독성도 떨어지고 유지보수에도 악영향을 미쳤습니다. 그래서 대부분의 애플리케이션에서는 뷰 처리의 어려움도 피하고, 코드도 분리하기 위해 액티비티 전환을 사용했습니다. 하지만 화면이 큰 단말에서는 이 방식의 구성이 화면을 쓸데없이 많이 차지한다는 단점을 가지게 됩니다. 

그래서 등장한 것이 한 화면에 가급적 다양한 정보를 표시할 수 있는 플래그먼트입니다. 플래그먼트는 액티비티처럼 관련된 코드를 한곳에 묶을 수도 있고, 일반 뷰처럼 애플리케이션 레이아웃에 플래그먼트를 자유롭게 배치할 수도 있습니다. 즉, 한 화면에 여러 플래그먼트가 표시됨과 동시에 각 플래그먼트들을 조작하는 코드들은 각각 분리되어 있는 것이죠. 아래의 허니콤용 G메일 앱을 보면 플래그먼트의 이러한 특징을 확인 할 수 있습니다.


   
출처 : 커니의 안드로이드 이야기  




플래그먼트의 생애 주기  

플래그먼트는 액티비티와 같이 플래그먼트의 상태가 계속해서 변하며, 상태가 변할 때마다 그에 해당하는 생애 주기 메서드(콜백 메서드)가 호출됩니다. 플래그먼트의 생애주기 메서드 및 각 메서드의 호출 순서는 다음과 같습니다.

         출처 : 커니의 안드로이드 이야기


  • onAttach(Activity) : 플래그먼트가 액티비티 레이아웃에 포함되는 순간 호출됩니다. 액티비티 레이아웃에 플래그먼트를 정적으로 배치했다면 액티비티가 시작될 때 같이 호출되며, 동적으로 레이아웃에 추가할 땐 플래그먼트를 레이아웃에 추가하는 순간 호출 됩니다.
  • onCreate(Bundle) : 액티비티의 onCreate() 콜백 메서드와 유사하게 플래그먼트가 최초로 생성될 때 호출됩니다.
  • onCreateView(LayoutInflater, ViewGroup, Bundle) : 플래그먼트의 UI를 구성하는 뷰(View)를 반환합니다. UI를 가지지 않는 플래그먼트일 경우 null을 반환할 수도 있습니다.
  • onStart() : 플래그먼크가 화면에 표시될 때 호출됩니다. 하지만, 아직 사용자와 상호작용은 할 수 없는 상태입니다.
  • onResume() : 플래그먼트가 사용자와 상호작용을 할 수 있게 되었을 때 호출됩니다. 즉, 플래그먼트가 완전히 화면에 표시되어 제 역할을 수행할 수 있게 된 상태입니다.
  • onPause() : 액티비티의 onPause()와 유사하게 플래그먼트가 사용자와 상호작용을 할 수 없게 될 때 호출됩니다. 플래그먼트가 아직 화면에 표시되고 있는 상태이나, 다른 요소에 의해 플래그먼트가 가려져 상호작용을 하지 못하는 상태입니다.
  • onStop() : 플래그먼트가 화면에서 보이지 않게 될 때 호출됩니다. 액티비티가 화면에서 보이지 않게 될 때 onStop() 메소드가 호출 되는 것과 유사합니다.
  • onDestroyView() : 플래그먼트가 화면에서 사라진 후, 뷰의 현재 상태가 저장된 후 호출됩니다. 여기에서 저장된 뷰의 상태는 액티비티와 유사하게 Bundle 형태로 저장되며, 저장된 뷰의 상태는 onCreate() 및 onCreateView()에서 다시 불러들일 수 있습니다. 
  • onDestory() : 플래그먼트가 더 이상 사용되지 않을 때 호출됩니다.
  • onDetach() : 플래그먼트가 액티비티 레이아웃에서 제거될 때 호출됩니다.



플래그먼트의 서브 클래스  

플래그먼트를 상속한 서브 클래스로는 DialogFragment, ListFragment, PreferenceFragment 등이 있습니다. 

  • DialogFragment : 다이얼로그를 화면에 띄웁니다. 
  • ListFragment : 아이템들을 리스트로 화면에 표시합니다. ListActivity와 동일하게 Adapter를 이용해 리스트를 뿌립니다. ListView와 관련된 주요 메소드들도 제공합니다.
  • PreferenceFragment :  PreferenceActivity와 유사합니다. 설정 화면을 만드는데 유용하게 사용될 수 있습니다.





※ 플래그먼트에 대한 더 자세한 내용은 안드로이드 개발자 사이트를 참고하시면 됩니다.
Posted by 플라스틱라디오
IBM developerWorks 에 'Ajax 마스터하기'라는 제목으로 연재된 Ajax 기술자료입니다. Ajax에 대한 개념을 잡는 것부터 시작해서 실제 사용하는 방법까지 상당히 정리가 잘 되어 있는 강좌인 듯 합니다. 이 문서를 보는 것만으로도 Ajax를 마스터하는데 큰 무리는 없을 거 같습니다. 


Ajax 마스터하기, Part 1: Ajax 소개 
Ajax 마스터하기, Part 2: JavaScript와 Ajax를 이용한 비동기식 요청
Ajax 마스터하기, Part 3: Ajax의 고급 요청 및 응답 
Ajax 마스터하기, Part 4: 웹 응답에 DOM 활용하기
Ajax 마스터하기, Part 5: DOM 다루기
Ajax 마스터하기, Part 6: DOM - 기반 웹 애플리케이션 구현하기
Ajax 마스터하기, Part 7: 요청과 응답에 XML 사용하기 
Ajax 마스터하기, Part 8: 요청과 응답에 XML 사용하기
Ajax 마스터하기, Part 9: Google Ajax Search API 사용하기
Ajax 마스터하기, Part 10: 데이터 전송에 JSON 사용하기
Ajax 마스터하기, Part 11: 서버 측의 JSON


IBM developerWorks에는 위의 강좌 말고도 다른 Ajax 관련 강좌들을 비롯한 유용한 웹프로그래밍 강좌들이 올라와 있으니 꼭 한번 방문해 보시기를 추천 드립니다.

'웹프로그래밍 > Ajax' 카테고리의 다른 글

IBM developerWorks에서 제공하는 Ajax 강좌  (0) 2011.12.20
Ajax란?  (0) 2011.12.20
Posted by 플라스틱라디오
TAG AJAX


Ajax 입문 Asynchronous JavaScript + XML에서 발췌한 내용임을 미리 밝힙니다.



Ajax란?  

Ajax는 Synchronous JavaScript And XML(비동기 자바 스크립트와 XML)의 약자로 서버와의 비동기 통신을 이용해 마치 데스크탑 애플리케이션을 사용하는 것과 같은 사용자와 애플리케이션간의 인터랙티브한 사용자 경험을 가능하게 하는 스크립트 언어입니다.

이전의 동기 통신에서는 웹 애플리케이션이 서버와의 인터랙션을 필요로 할 때에 매번 브라우저가 사용자와의 인터랙션을 멈추고, 서버로부터의 응답이 올때까지 기다려야 했습니다. 서버로부터의 응답이 오기 전까지 사용자는 아무것도 할 수 없었죠.
하지만 비동기 통신에서는 서버로부터의 응답을 기다릴 필요 없이 사용자는 계속해서 애플리케이션에서 원하는 작업을 할 수 있습니다. 

Ajax를 이용하는 예로는 구글맵, 검색사이트 검색창에서의 검색어 제시, 네이버 실시간 검색 순위 등이 있습니다.





Ajax의 장점  

Ajax의 주요 장점은 아래와 같습니다.

(1) 페이지 이동없이 고속으로 화면 전환
: Ajax는 페이지의 이전 없이 필요한 부분의 데이터 송수신만을 자유롭게 행할 수 있으므로, 효율적이고 빠르게 페이지를 전환할 수 있습니다.

(2) 서버의 처리를 기다리지 않고 비동기 요청이 가능
: 서버와의 통신시 사용자는 서버로부터의 응답을 기다리지 않고 계속해서 다음 작업을 이어갈 수 있습니다.

(3) 서버에서 처리하는 부분을 클라이언트에서 분담 가능
: Ajax로는 최소의 데이터만을 브라우저에 전달하기 위해 서버에서 하는 작업 중 JavaScript에서 수행 가능한 일을 
클라이언트에서 분담하는 것이 가능합니다. 

(4) 수신하는 데이터의 양을 줄일 수 있음
: 기존의 브라우저가 수신하는 데이터는 HTML이나 XHTML과 같은 마크업 언어로 받는 것이 일반적인데 반해, Ajax로는 수신하는 데이터가 HTML이나 XML에 한정되지 않고 최소한의 텍스트 데이터로도 수신이 가능하기 때문에 수신 데이터이 양을 줄일 수 있습니다.

(5) 실시간 인터렉티브 성능이 증가
: (1) ~ (4) 까지의 장점을 이용해 Ajax에서는 데스크탑 애플리케이션과 유사한 실시간 인터랙티브 성능을 보여줄 수 있습니다.




Ajax의 단점  

Ajax의 단점은 아래와 같습니다.

(1) 크로스 브라우저화의 노하우가 필요
: Ajax는 JavaScript 이므로 브라우저에 따른 크로스 브라우저 처리가 필요합니다. 

(2) Ajax를 지원하지 않는 브라우저에 대한 대책 필요
: Ajax를 지원하지 않는 브라우저에서는 사용이 불가능하므로 이에 대한 대책이 필요합니다. (하지만 현재 Ajax를 지원하지 않는 브라우저는 거의 없다고 볼 수 있습니다.)

(3) 보안에 대한 주의가 불가피
: 페이지 이동 없이 서버와 통신하기 때문에 전보다 더욱 신중한 보안상의 주의가 요구됩니다.

(4) 현재의 처리 상황에 대한 정보가 필요
: 페이지 전환 없이 처리가 진행되므로 사용자가 처리가 완료되었는데도 이를 모를 수 있습니다. 따라서 처리 중을 나타내는 프로그레시브 바등을 사용하는 것이 요구됩니다.
 
(5) 요청을 남발하면 역으로 서버 부하가 늘 수 있음
: Ajax의 장점은 서버 부하의 감소에 있지만 그 의도와 반대로 요청이 너무 빈번하게 일어나 서버의 부하를 늘려버릴 수 있습니다. 따라서 데이터 전송량, 요청 회수, 서버 부하 등에 대한 종합적인 판단과 튜닝이 필요합니다.


출처 : Ajax 입문 Asynchronous JavaScript + XML | 타카하시 토시로 저 | 이창신 역 | 한빛미디어 

'웹프로그래밍 > Ajax' 카테고리의 다른 글

IBM developerWorks에서 제공하는 Ajax 강좌  (0) 2011.12.20
Ajax란?  (0) 2011.12.20
Posted by 플라스틱라디오
TAG AJAX

Fixedsys 폰트

이클립스 2011.12.19 21:04

이클립스에서 많이 사용되는 폰트라고 하네요. 설치는 첨부된 파일을 다운로드 한 후 마우스 우클릭 후 '설치' 항목을 선택하면 됩니다. 그리고 재부팅을 해주셔야 그때부터 사용이 가능합니다.


그런데 Window 7에서는  Fixedsys 폰트를 설치하고 재부팅했는데도 이클립스 등의 프로그램에 폰트 선택 메뉴에서Fixedsys 항목이 나타나지 않아 사용할 수 없는 상황이 발생합니다. Fixedsys 폰트가 기본적으로 표시되지 않음으로 설정되기 때문인데요, 이때에는 '제어판 - 글꼴'로 들어가셔서 Fixedsys 폰트를 수동으로 표시해 주셔야 합니다. 표시로 변경하는 방법은 간단합니다.

먼저 제어판 - 글꼴로 들어갑니다. 그러면 Fixedsys 글꼴이 아래와 같이 흐릿하게 보이는 것을 확인하실 수 있는데요, 이제 Fixedsys 글꼴을 선택하신 다음 마우스 우클릭하여 '표시' 항목을 선택해주시면 됩니다. 그러면 Fixedsys 글꼴이 진하게 표시되는 것을 확인 할 수 있습니다.








Fixedsys 글꼴의 모습은 아래와 같습니다.





아래 파일은 Fixedsys 폰트입니다. 이중 kvgafix.fon은 \가 역슬래시로 표시되도록 수정한 Fixedsys 폰트이고, FSEX300.ttf는 고정사이즈로 수정한 Fixedsys 폰트입니다.





출처 : 김.철.수.의 블로그
Posted by 플라스틱라디오

톰캣은 아파치 소프트웨어 재단에서 개발된 서블릿 컨테이너(또는 웹 컨테이너)이다.  톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공한다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고 톰캣은 HTTP 서버도 자체 내장하고 있다.

톰캣은 웹 서버로 사용되기보다는 was로 사용된다. 물론, 톰캣에 내장된 웹 서버로만 웹 시스템을 구성할 수도 있지만, 대규모 사용자가 사용하는 시스템 구축시에는 웹 서버와 연동하는 안정적인 시스템을 구축해야 한다. html과 같은 정적 페이지를 로딩하는데 있어서 톰캣에 내장된 웹 서버만으로는 수행 속도가 너무 느리기 때문이다. 따라서 이를 해결하기 위해 톰캣은 아파치와 연동한다. (아파치는 html과 같은 정적인 페이지를 로드하는데 사용되는 웹 서버이다.) 아파치가 실행되면 아파치는 html 파일은 자신이 수행하고 jsp 파일은 톰캣으로 넘겨서 톰캣이 수행하게 만드는 것이다.


출처 : 위키백과





아파치 톰캣의 설치  

아파치 톰캣의 설치는 아파치 재단 사이트에서 받을 수 있습니다. (아파치 톰캣 다운로드 페이지 바로가기) 설치파일 보다 zip 파일을 받는 것이 권장됩니다. 설치환경이 변경될 경우에도 폴더만 옮겨주면 그대로 사용이 가능하기 때문입니다. (따라서 Binary Distributions - Core 의 가장 첫번째 항목인 zip 을 클릭해 다운로드 받도록 합니다.) zip 파일로 다운 받을 경우, 아파치 톰캣의 설치는 다운로드 받은 파일의 압축을 설치하고 하자는 폴더에 해제하는 것으로 완료됩니다.  

설치 후에 환경 변수의 시스템 변수에 변수이름은 'CATALINA_HOME', 변수 값은 '톰캣이 설치된 경로'인 변수를 추가하고 path 환경변수의 변수 값에 %CATALINA_HOME%;을 추가합니다. 하지만 이클립스만을 사용하여 개발시에는 이클립스에서 아파치 톰캣 실행 환경(jar파일)을 자동으로 가져오기 때문에 환경변수를 설정해줄 필요가 없습니다.




아파치 톰캣의 폴더  

아파치 톰캣이 설치된 폴더에는 아래와 같은 폴더들이 들어있습니다.. 각 폴더의 역할은 다음과 같습니다.

  • bin : 바이너리 파일(실행 파일)이 들어 있습니다.
  • conf : 환경설정 파일이 들어있습니다 .
  • lib : 톰캣 실행에 필요한 라이브러리(jar 파일)들이 들어 있습니다 .
  • logs : 오류에 관한 log 파일이 들어 있습니다 .
  • temp : 톰캣 실행 도중 임시 파일이 저장되는 곳이습니다 .
  • webapps : 웹애플리케이션 관련 파일(.html, .jsp)이 들어 있습니다 .
  • work : 톰캣 실행 도중 작업 파일이 저장되는 곳 입니다 .





아파치 톰캣 환경 설정  

아파치 톰캣의 환경 설정은 conf 폴더의 context.xml, server.xml, web.xml에 설정되어 있습니다.



(1) server.xml : 아파치 톰캣 서버에 대한 환경 설정
Connector 태그에서 아파치 톰캣의 포트번호와 인코딩등을 설정할 수 있습니다. 포트번호는 port 속성의 값을 변경하면되는데 기본값은 8080입니다. 인코딩은 URIEncoding 속성을 추가하여 설정할 수 있고 속성의 값으로 "euc-kr"이나 "utf-8"을 지정하면 한글이 깨지지 않습니다. 하지만 서버에서 한글처리를 지정해주기보단 서블릿에서 한글 처리를 해주는 것이 일반적입니다.

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443"
           URIEncoding="euc-kr" />

Host 태그의 appBase 속성에서는 웹애플리케이션의 저장 경로를 지정할 수 있습니다. 기본적으로 webapps로 설정되어 있습니다.
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">


(2) web.xml : 웹앱의 환경 설정  
서블릿의 사용을 위해서는 InvokeServlet 클래스를 사용해야 하는데 기본적으로는 사용이 안되도록 주석이 처리되어 있습니다. 따라서 아래 두곳의 주석을 제거함으로써 서블릿이 동작하게 해주어야 합니다. 

<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>


(3) context.xml 
서블릿의 사용을 위한 InvokeServlet 클래스를 사용하기 위해 Context 태그의 priviledged 속성의 값을 true로 설정합니다. reloadabel 속성을 true로 설정할 경우 서버에 클래스 파일 추가시 서버 재부팅없이도 바로 적용되는데 이 편이 더 편리하므로 설정하는 것이 좋습니다.

<Context privileged="true" reloadable="true">



 
아파치 톰캣 실행  

아파치 톰캣 설치 폴더의 /bin/startup.bat 파일을 실행하여 아파치 톰캣 서버를 실행하는 경우에는 JDK 경로가 환경변수에 설정되어 있어야 합니다. 반면, 이클립스 상에서 서버를 실행하는 경우에는 JDK 실행환경을 자동으로 가져오므로 환경변수를 따로 설정하지 않아도 됩니다. 

만일 데스크탑 컴퓨터에 아파치 톰캣을 설치하고 웹 애플리케이션을 구동했을시 이 웹애플리케이션에 외부에서 접근하고자 하면 이클립스와 상관없이 자바 서블릿의 실행을 위해서 JDK 환경변수 설정이 필요합니다. 


 

아파치 톰캣 서버가 정상적으로 실행되고 있는 경우에는 웹브라우저의 주소창에 http://localhost 입력 후 이동하면 아래와 같은 아파치 톰캣 설치 폴더의 /webapps/root 폴더안에 있는 기본 index.html에 연결됩니다. (이클립스에서 서버를 실행한 경우에는 root 위치를 /webapps/root 가 아닌 이클립스의 workspace로 지정된 폴더로 잡으므로 아래의 화면이 나타나지는 않습니다.)
 




아파치 톰캣 서버의 종료는 startup.bat로 서버를 실행한 경우에는 톰캣 실행 창에서 Ctrl + C를 누르거나, 아파치 톰캣 설치 폴더안의 /bin/shutdown.bat를 실행하면 됩니다. 이클립스에서 아파치 톰캣 서버를 실행한 경우에는 이클립스의 server 창에서 정지버튼을 눌러주면 됩니다. 

한가지 주의할 점은 startup.bat로 아파치 톰캣 서버 실행한 후에 이클립스에서 아파치 톰캣 서버를 중복으로 실행할 수 없다는 점입니다. 이클립스에서 서버를 실행하시려면 먼저 startup.bat르 실행한 서버의 동작을 정지 시킨 후 실행하셔야 합니다.

Posted by 플라스틱라디오

실전 jQuery 쿡북
jQuery코어 커뮤니티 저 | 김경균 외 역 | 비제이퍼블릭 | 2010년 06월
 

반디앤루니스 책소개 페이지로 이동 


Posted by 플라스틱라디오

크롬 브라우저에서는 검색사이트에 직접 갈 필요없이 주소창에 검색어를 입력하여 바로 검색결과를 확인할 수 있는 기능을 제공합니다. 

주소창에 검색어 입력 후 엔터를 누르면 기본적으로 기본 검색사이트로 등록된 검색엔진의 검색결과를 보여줍니다. 만일, 옵션에 여러개의 검색사이트를 등록한 경우에는 주소창에 검색사이트 키워드를 입력 후 Tab 키를 누르면 해당하는 검색엔진의 검색 결과를 볼 수 있습니다.
 


검색사이트 등록 및 키워드 설정은 아래와 같이 옵션 - 기본설정 - 검색 메뉴에서 하면 됩니다.




빨간 네모박스로 표시한 부분이 검색사이트 키워드 부분이며, 이곳을 클릭하면 원하는 키워드로 변경할 수 있습니다. (편리한 사용을 위해서는 짧은 키워드로 등록하는 것이 좋겠죠..^^)




위와 같이 네이버사이트를 키워드 n으로 등록한 경우에는 아래같이 주소창에 먼저 n을 입력한 후 Tab 키를 누르면 네이버에서 검색 가능하게 검색엔진이 전환 됩니다.  이 상태에서 검색할 내용을 입력하면 네이버에서 검색한 결과가 보여지게 되는것이죠.


Posted by 플라스틱라디오
TAG 크롬

지원 패키지란?  

지원 패키지는 안드로이드 3.0 플랫폼 버전 이후 추가된 API 및 유용한 유틸리티 API 들을 묶어서 만들어진 정적 라이브러리 입니다. 다시 말해, 허니콤에서 유용한 기능들을 기존의 안드로이드 플랫폼에서도 사용 가능하도록 공식적으로 릴리즈한 공개 라이브러리 입니다. (이전에는 호환성 패키지(Compatibility Package) 였는데 지원 패키지(Support Package)로 이름이 변경되었습니다.)

현재 동일한 인터페이스를 갖춘 v4와 v13 두 가지 버전이 제공되는데, v4는 안드로이드 API Level 4 (도넛) 버전을 기반으로 작성된 라이브러리이며, v13은 안드로이드 API Level 13 (허니콤) 버전을 기반으로 작성된 라이브러리 입니다. 따라서, 애플리케이션의 타겟 버전이 도넛, 이클레어, 프로요, 진저브래드인 경우에는 v4 버전의 호환성 패키지 라이브러리를 사용할 수 있고 허니콤, 아이스크림인 경우에는 v13 버전의 호환성 패키지 라이브러리를 사용할 수 있습니다.




지원 패키지의 기능  

지원 패키지에 담긴 주요 기능은 Fragment, Loader, ViewPager, Least Recently Used Cache 등입니다.

  • Flagment : Flagment는 하나의 동작 모듈이라고 할 수 있습니다. 지금까지는 대게 하나의 액티비티가 하나의 동작 모듈로 간주되었는데 허니콤 이후 멀티 패널 UI가 요구됨에 따라 액티비티가 여러 기능을 수행할 필요가 생겼습니다. 이에 따라, 액티비티 내에 하나 이상 포함될 수 있으면서 동시에 독립적으로 동작할 수 있는, 액티비티와 뷰 중간쯤의 위치에 Fragment 클래스가 추가되었습니다.
  • Loader : 메인 스레드가 아닌 별개의 스레드를 이용해 비동기적으로 데이터를 동작하고자 할 때 손쉽게 사용할 수 있는 Abstract 클래스 입니다.
  • ViewPager : 수평 화면 전환이 필요할 때 이를 손쉽게 구현할 수 있게 도와주는 위젯입니다.
  • Least Recently Used Cache : 간편하게 사용할 수 있는 Hash 로 최초 생성 시 Hash의 최대 크기를 지정할 수 있으며, 만일 지정된 크기보다 더 많은 아이템을 추가하려고 하는 경우에는 이전에 사용되었던 아이템(Least Recently Used)이 Hash에서 제거됩니다. 이미지 비트맵 등을 저장하는 캐쉬를 만들 때 유용합니다. 




지원 패키지의 사용  

지원 패키지의 사용을 위해서는 아래와 같이 ADT를 이용해 Android Support package를 인스톨해 주어야 합니다. 인스톨이 완료되면 Android SDK가 설치된 폴더의 /extras/android/support 폴더 안에 지원 패키지가 다운로드 됩니다.




정상적으로 설치가 완료되었으면 이클립스의 안드로이드 프로젝트에 아래와 같이 android-support-v4.jar 파일이 추가되고 안드로이드 지원 패키지에서 제공하는 클래스들을 사용할 수 있습니다.

 





출처 : 휴휴휴
Posted by 플라스틱라디오

Activity의 생명 주기  

Activity의 상태는 크게 활성(Activity), 일시정지(Pause), 정지(Stopped) 로 나눌 수 있습니다.

활성(Activity)
현재 화면에 Activity가 표시되는 상태이며, 사용자와 상호작용 할 수 있는 상태를 말합니다. 일반적으로 Activity가 화면에 표시되고 있을때를 의미합니다.

일시정지(Pause)
화면에는 Activity가 보이지만, 사용자와 상호작용 할 수 없는 상태입니다. 즉, 배경이 투명한 Activity나 화면 전체를 가리지 않는 Activity에 의해 본 Activity의 일부가 가려진 경우를 말합니다. Dialog의 경우는 Activity의 일부를 가리긴 하지만 Dialog도 Activity의 일부이기 때문에 Dialog가 띄워진 경우는 일시정지 상태가 아닙니다.

정지(Stopped)다른 Activity에 의해 완전히 가려진 상태입니다.


Activity는 위와 같이 크게 3가지 상태로 나뉘지만 정확히는 아래와 같은 7개의 상태로 나눠지게 됩니다. 
  • onCreate()

  • onStart()

  • onResume()

  • onPause()

  • onStop()

  • onDestroy()
  

Activity의 생명 주기

Activity는 생명 주기에 따라 상태가 변화하는데 이를 위해 각 상태에 해당하는 메소드가 호출됩니다. 따라서, 각 상태에 해당하는 메소드를 오버라이드 하면 특정 상태에서 원하는 작업을 실행시킬 수 있습니다.




Activity의 시작  

Activity의 생명 주기
           
Activity의 생성은 onCreate 메소드를 통해 이루어집니다. 따라서 onCreate 메소드에서는 Activity 초기화를 담당하는 코드들을 처리해주어야 합니다.

onCreate 메소드를 통해 Activity를 띄우기 위한 모든 준비가 완료되었다면, onStart 메소드를 호출해 Activity를 시작합니다. 하지만, 이 상태는 Activity가 완전히 화면에 표시된 상태가 아니라 Activity가 화면에 표시되기 직전의 상태입니다.

Activity의 화면 표시는 그 다음에 실행되는 onResume 메소드에 의해 이루어집니다. onResume 메소드는 Activity가 화면에 표시되고, 사용자와 상호작용하기 직전의 상태입니다.
 



Activity의 정지/일시정지  

Activity의 생명 주기

Activity가 화면에 표시되고, 사용자와 상호 작용할 수 있는 활성상태(Active)에서 다른 Activity에 의해 가려지거나 화면에서 사라지게 되면 그 Activity는 정지상태(Stopped)가 됩니다. 이때 실행되는 메소드가 onStop 입니다. 

일반적으로 정지상태에서는 사용자가 Activity를 다시 사용할 것을 대비하여 메모리에서 바로 사라지지 않고 올라가 있다가 사용자가 다시 Activity를 호출할 경우 Activity를 재생성 할 필요없이 화면에만 띄우면 되므로 onRestart - onStart - onResume 과정을 거쳐 다시 활성상태가 됩니다. 

만일, 정지상태에서 메모리 부족으로 메모리 확보가 필요한 상황이 되면 Activity는 강제 종료되어 메모리 상에서 사라지고 사용자가 Activity를 다시 호출할 경우 onCreate - onStart- onResume 과정을 거쳐 Activity가 재실행됩니다.


일시정지상태(Paused)는 Activity가 화면에 표시되고 있지만 사용자와 상호작용을 하지 않고 있는 상태이고 이때 실행되는 메소드는 onPause 입니다.

일시정지 상태에서는 일반적으로 사용자가 어떤 작업(예를 들어 어떤 문자열의 입력 등)을 진행중일 가능성이 높습니다. 그런데 이때 메모리가 부족하여 Activity가 종료된다면 사용자가 입력했던 테이터들이 손실됩니다.
따라서 이를 대비해 사용자의 입력 값등을 미리 저장해놓아야 하는데 이때 onSaveInstanceState 메소드를 이용합니다. onSaveInstanceState 메소드는 Activity의 종료전 상태를 Bundle 객체로 저장해 놓았다가 나중에 해당 Activity를 다시 실행할 때 onCreate 메소드나 onRestoreInstanceState 메소드에 Bundle 객체로 전달해 줍니다. 

onSaveInstanceState 메소드는 Activity가 강제 종료 되었을때만 호출되고, onRestoreInstanceState 메소드는 강제 종료된 Activity를 재실행 할때에만 호출되므로, 만일 Activity가 시작하거나 종료될 때 해주어야 할 작업이 있다면 이 두 메소드를 오버라이드 하는 대신 onCreate, onStop 또는 onDestroy 메소드를 오버라이드한 후 그 안에 코드를 구현해야 안정적으로 해당 작업을 처리할 수 있습니다. (참고로 만일 onSaveInstanceState 메소드가 실행된다면 onPause 혹은 onStop 메소드 이후에 호출되고, onRestoreInstanceState 메소드가 실행된다면 onCreate 메소드 다음에 호출됩니다.)
 




Posted by 플라스틱라디오


맨 위로