1 / 46

MIDlet 프로그램 구조 및 생명 주기

MIDlet 프로그램 구조 및 생명 주기. Lecture #3. 강의 목차. J2ME 플랫폼 개요 MIDlet 프로그램의 기본 구조를 익힌다 . MIDP 2.0 패키지의 종류를 알아본다 . 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다 . 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어 본다. J2ME(Java 2 Micro Edition) 플랫폼. “One size doesn't fit all”. “WORA (Write Once Run Anywhere.)”.

xannon
Télécharger la présentation

MIDlet 프로그램 구조 및 생명 주기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIDlet 프로그램 구조 및 생명 주기 Lecture #3

  2. 강의 목차 • J2ME 플랫폼 개요 • MIDlet 프로그램의 기본 구조를 익힌다. • MIDP 2.0 패키지의 종류를 알아본다. • 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다. • 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어 본다. Mobile Programming

  3. J2ME(Java 2 Micro Edition) 플랫폼 “One size doesn't fit all” “WORA (Write Once Run Anywhere.)” Mobile Programming

  4. J2ME(Java 2 Micro Edition) 플랫폼 “WORA (Write Once Run Anywhere)” Personal Java - 소형기기에 적합한 spec. - J2ME CDC의 모태 Embedded Java - Personal Java 보다 협소적 환경의 spec. 한계를 극복하기 위한 방안 - J2ME에서는 각 디바이스와 운영환경에 맞게 플랫폼을 분할 (플랫폼 분할을 위해 configuration과 profile 개념 도입) Mobile Programming

  5. Configuration and Profile (1) • Configuration and Profile : • J2ME의 핵심적 요소 • 플랫폼의 통일성과 다양성을 만족 시킴 • VM과 클래스 라이브러리를 특정한 장치 그룹에 최적화하는 것 • 현재 CLDC와 CDC Configuration으로 정의 • CLDC 디바이스 군: • - 16 비트 또는 32 비트 CPU • - 160KB~512KB 크기의 메모리 • (RAM과 ROM 포함) • - 제한된 전력 또는 배터리 파워 공급 • 낮은 네트웍 전송률 등의 기기 사양 • - 핸드폰, 양방향 삐삐, 또는 PDA 등과 • 같은 기기 • CDC 디바이스 군 • - 32 비트 CPU • - 2MB 이상의 메모리 • (RAM과 ROM 포함) • - 낮은 네트웍 전송률 • (9600 bps 보다 낮을 수 있음) • - PDA, 가전 기기, 자바폰, 디지털 셋톱 • (Set-top) 박스 등과 같은 기기 Mobile Programming

  6. Configuration and Profile (2) • J2ME 컨피규레이션과 프로파일 및 임베디드 자바 기술 Mobile Programming

  7. Configuration and Profile (3) Mobile Programming

  8. Configuration and Profile (4) • Configuration : • java.io • java.net • java.util • java.lang • Configuration이 포함하고 있는 명세 : • 자바언어에 대한 명세 : 부동소수점 지원 여부 등 • 가상 머신에 대한 명세 : KVM, pJava, eJava • Core API에 대한 명세 : java.* 패키지 • Profile : • 특정 device 및 산업군에 맞는 API에 대한 명세 • 이식성(Portability)을 지원 Mobile Programming

  9. CLDC/MIDP 구조 Mobile Programming

  10. CLDC (1) • KVM (Kilobyte or Kauai Virtual Machine) • NTT 도코모와 3Com에서 탑재 • kilobyte 단위로 디자인 • 메모리 풋프린트는 50KB, 클래스 라이브러리 포함 128KB Mobile Programming

  11. CLDC (2) • CLDC(Connected Limited Device Configuration) 명세서 • 자바 언어 및 가상 머신의 특징 • 코어 자바 라이브러리(java.*로 시작하는 패키지들) • 네트워킹과 입출력 • 보안과 국제화 • CLDC 디바이스 목표 • 128-512K의 메모리 여유 공간 • 16-32비트 프로세서 • 저전력 소모, 주로 배터리 사용 • 제한된 대역폭(9600 bps 이하)의 네트워크 연결성 Mobile Programming

  12. CLDC (3) • CLDC의 특징 • 부동 소수점을 지원 안 함. • 마무리(finalization)을 지원 안 함. • 에러 처리가 제한적이다. • JNI(Java Native Interface)를 지원 안 함. • 리플렉션을 지원 안 함. • 쓰레드 그룹과 데몬 쓰레드를 지원 안 함. • 사용자 정의 클래스 로더를 생성할 수 없다. • 약한 참조(weak reference)를 지원 안 함. • 클래스 파일 포맷이 다르고, 클래스 룩업, 클래스 로딩과 링킹 방법이 다름 • 모래상자 보안 모델을 사용한다. • 전혀 다른 네트워킹 및 입출력 모델을 가지고 있다. • 새로운 어플리케이션 모델을 가정하고 있다. Mobile Programming

  13. CLDC (4) • 클래스 파일 검증 과정 Mobile Programming

  14. CLDC (5) • GCF (Generic Connection Framework) Mobile Programming

  15. CLDC (6) • CLDC API Mobile Programming

  16. MIDP(Mobile Information Device Profile) (1) • MIDP 명세서 정의 • 어플리케이션 모델 • 유저 인터페이스와 이벤트 핸들링 • 영속적 저장공간 • 네트워킹, 타이머 지원 • 디스플레이 요구사항 • 96x54 이상의 스크린 사이즈 • 1비트 이상의 디스플레이(모노크롬) • 종횡비(aspect ratio)가 약 1:1에 근접 • 입출력 요구사항 • 한 손, 혹은 두 손으로 입력가능한 입출력 메커니즘 • 메모리 요구사항 • MIDP 컴포넌트를 위한 128K의 비휘발성 메모리 공간 • 애플리케이션이 생성하는 데이터의 저장을 위한 8K의 비휘발성 메모리 공간 • 자바 런타임을 위한 32K의 휘발성 메모리 공간 • 네트워킹 요구사항 • 양방향이고, 무선이며, 제한된 대역폭에, 간헐적으로 연결될 수 있음 Mobile Programming

  17. MIDP (2) • MIDP NG (Next Generation) • MIDP 1.0과의 백워드 호환성 • 작고, 대용량인 무선 핸드폰 • 코아 API가 많아지는 것을 막기 위한 긴밀한 풋프린트 유지 • MIDP 1.0 API를 튜닝하기 위해 MIDP 배치시에 얻은 많은 정보 • 모든 디바이스와 어플리케이션에 필요한 코아 기능 • mCommerce, 서비스 기반 어플리케이션을 가능 • MIDP NG는 차세대 MIDP로서 현재 JCP에 의해 JSR 118번으로 개발되고 있음 • 관련 사이트 : http://jcp.org/jsr/detail/118.jsp Mobile Programming

  18. JAM과 신개념 어플리케이션 모델(1) • JAM (Java Application Manager) • MIDlet은 자바 애플릿과 유사한 방식으로 실행 • MIDlet을 다운로드하여 설치, 업그레이드, 실행, 삭제하는 역할 • JAM의 기본 기능 Mobile Programming

  19. JAM과 신개념 어플리케이션 모델 (2) JAM 을 통한 어플리케이션 설치 과정 : Mobile Programming

  20. MIDlet과 JAR 파일 • MIDlet은 JAR 파일 형태로 배포 • JAR 파일에는 MIDlet 슈트의 패키지가 들어갈 수 있음 • JAR 컨텐츠에 대한 설명을 담고 있는 매니페스트(manifest) • MIDlet 클래스를 상속한 클래스들과 다른 공유 클래스들 • MIDlet이 사용하는 리소드 파일들(예를 들면 아이콘, 이미지 등) • 매니페스트에서 필수적으로 들어가야 하는 속성(Attributes) • MIDlet-Name • MIDlet-Version • MIDlet-Vendor • MIDlet-<n> • MicroEdition-Configuration • MicroEdition-Profile • MIDlet은 javax.microedition.midlet.MIDlet 클래스를 반드시 상속해야 함. Mobile Programming

  21. MIDlet Attributes Mobile Programming

  22. 어플리케이션 디스크립터(JAD) • MIDlet 애트리뷰트를 효율적으로 전송. • MIME type : text/sun.j2me.app-descriptor • 어플리케이션 디스크립터에 포함 되어야 할 필수적인 애트리뷰트 • MIDlet-Name • MIDlet-Version • MIDlet-Vendor • MIDlet-Jar-URL • MIDlet-Jar-Size • MicroEdition-Profile • MicroEdition-Configuration Mobile Programming

  23. MIDlet 프로그램의 생명주기 (1) • MIDlet 프로그램의 생명주기 정지 종료 실행 Mobile Programming

  24. MIDlet 프로그램의 생명주기 (2) • 정지 • MIDlet 프로그램이 초기화되거나 일시정지(Paused)된 상태로 공유 리소스를 점유하지 않는다. • MIDlet을 처음 실행하면 응용 프로그램 관리자는 일시정지 상태로 들어간다. 그런 뒤 자원 할당이 가능하면 startApp()를 호출하여 실행 상태로 바꾼다. • 실행 • MIDlet 프로그램이 실행(Active)되는 상태다. • 응용 프로그램 관리자가 startApp() 메소드를 요청하거나 미들렛이 esumeRequest()를 응용 프로그램 관리자에게 요청해서 startApp()가 호출될 때 실행 상태로 들어간다. • 종료 • MIDlet 프로그램이 종료(Destroyed)되는 상태로, 공유 리소스를 해제한다. • 일시정지나 실행 상태에서 destroyApp()를 호출하면, 응용 프로그램 관리자는 종료 상태로 들어가서 프로그램을 종료한다. Mobile Programming

  25. MIDlet 프로그램의 생명주기 (3) • startApp() : • 필요한 리소스에 대한 점유 획득. Active 상태로 전이 • pauseApp() : • 임시적인 리소스들에 대한 점유 해제. Pause 상태로 전이 • destroyApp() : • MIDlet이 종료한 상태. 공유 리소스를 해제한다. • - Destoryed 상태로 전이 MIDlet의 상태 다이어 그램 Mobile Programming

  26. 네트워킹 • MIDP 1.0 명세서는 HTTP 1.1 프로토콜의 서브셋을 지원. • MIDP는 javax.microedition.io.HttpConnection을 통해 HTTP 연결을 지원. Mobile Programming

  27. 레코드 관리 시스템(RMS) • 데이터를 영속적으로 저장하고 사용하기 위해 RMS (Record Management System) 메커니즘을 제공. • 레코드 기반의 초소형 데이터베이스. • Javax.microedition.rms 패키지를 통해 제공. Mobile Programming

  28. 타이머 지원 • 일정한 시간 동안 지정해서 한번만 실행하거나 일정한 간격으로 여러 번 반복적으로 실행하도록 스케쥴링 할 수 있다. • Java.util.Timer • Java.util.TimerTask Mobile Programming

  29. 유저 인터페이스 (1) • MIDP 유저 인터페이스 설계 원칙 1. 한 손으로 입력 가능해야 한다. 2. 작은 스크린 사이즈에 적용 가능해야 한다. 3. 포인팅 디바이스가 없는 단말기에 적용 가능해야 한다. 4. 기존의 입출력 방법과 통합되어야 한다 • MIDP에서 정의하는 두 가지 레벨의 API 1. 상위 레벨 API: 비즈니스 어플리케이션과 같은, 높은 수준의 이식성(Portability)를 요구하는 어플리케이션의 제작에 사용될 API 2. 하위 레벨 API: 게임 어플리케이션과 같은, 특정한 목적에 맞게 사용이 가능한 어플리케이션의 제작에 사용될 API Mobile Programming

  30. 유저 인터페이스 (2) 핵심적인 유저 인터페이스 API의 클래스 계층도: Mobile Programming

  31. 유저 인터페이스 (3) • 두 가지 디스플레이 가능 클래스: • Canvas 클래스: • Canvas 클래스는 게임과 같은 하위 레벨 API를 사용하는 어플리케이션을 위한 스크린을 제공한다. • Screen 클래스: • 텍스트 박스, 리스트, 등의 상위 레벨 API를 위한 최상위 추상화를 제공 • Screen 클래스를 상속하는 List, TextBox, Alert와 같은 클래스들은 사전에 정의된 구조를 사용할 수 있는 컴포넌트들 • 사전에 정의된 구조를 사용할 수 없는 TextField, ImageItem, Gauge 등의 클래스들은 Screen 클래스를 상속하는 Form 클래스를 상속하도록 설계되어 있다 Mobile Programming

  32. CLDC/MIDP 아키텍처 Mobile Programming

  33. CLDC/MIDP 표준 패키지 Mobile Programming

  34. MIDlet 프로그램의 기본 구조 (1) • 텍스트 기반 미들렛 프로그램 • 화면 출력 제한적이다. • 표현이 자유롭지 못하다. • MIDlet 클래스를 상속한다. • 그래픽 기반 미들렛 프로그램 • 표현이 자유롭다. • MIDlet 클래스, Canvas 클래스 상속한다 텍스트 기반 그래픽 기반 Mobile Programming

  35. MIDlet 프로그램의 기본 구조 (2) • 텍스트 기반 MIDlet 프로그램 구조 import javax.microedition.MIDlet.*; // ① import 문 import javax.microedition.lcdui.*; public class 클래스명MIDlet extends MIDlet { // ② 클래스 선언 displaydisplay; public 클래스명MIDlet() { // ③ 생성자 display = Display.getDisplay(this); } public void startApp() { // ④ 실행 상태 ... display.setCurrent(Displable nextDisplable); } public void pauseApp() { // ⑤ 정지 상태 ... } public void destroyApp(boolean unconditional) { // ⑥ 종료 상태 ... } } Mobile Programming

  36. MIDlet 프로그램의 기본 구조 (3) • import 문 • MIDP 라이브러리로 제공하는 패키지에는 포함된 클래스를 사용하려면 소스 코드 맨 앞에 import 문으로 선언해야 한다. Mobile Programming

  37. MIDlet 프로그램의 기본 구조 (4) • 클래스 선언 • 클래스를 선언할 때는 MIDlet 클래스를 반드시 상속받아야 한다. • MIDlet 클래스에 정의된 응용 프로그램 관리자가 미들렛 프로그램을 생성하고 상태 변화를 관리한다. • 응용 프로그램 관리자는 미들렛의 상태 변화에 따라 적절한 메소드를 호출하여 상태 변경을 알려 줌으로써 미들렛 프로그램을 실행, 일시정지, 완전 종료시킬 수 있다. • 생성자 • 클래스를 객체로 생성할 때 처음 한번만 실행되는 메소드로, 꼭 필요하지는 않다. • 멤버 변수나 객체를 초기화하는 데 주로 이용된다. • 반환형이 없으며, 클래스 이름과 동일해야 한다. Mobile Programming

  38. MIDlet 프로그램의 기본 구조 (5) • 실행 상태 • 미들렛이 실행되는 상태다. • 미들렛을 정지 상태에서 실행 상태로 이동할 때 startApp()를 호출한다. • 정지 상태에 있을 때만 호출된다. • 정지 상태 • 공유 자원을 해제해 주어야 한다. • 미들렛을 처음 실행하면 정지 상태, 자원 할당이 가능하면 startApp()를 호출하여 실행 상태로 이동한다. • 실행 상태에서만 pauseApp()를 호출할 수 있다. Mobile Programming

  39. MIDlet 프로그램의 기본 구조 (6) • 종료 상태 • 미들렛이 종료되기 전 기본 설정이나 상태 저장 등 필요한 정보를 저장하고 모든 자원을 해제하는 상태다. • 미들렛이 실행된 상태거나 정지된 상태에서만 destroyApp()를 호출할 수 있다. Mobile Programming

  40. MIDlet 프로그램의 기본 구조 (7) • 그래픽 기반 MIDlet 프로그램 구조 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class 클래스명MIDlet extends MIDlet { Display display; 클래스명Canvas canvas_; public 클래스명MIDlet() { display = Display.getDisplay(this); canvas_= new 클래스명Canvas(); } public void startApp() { display.setCurrent(canvas_); } public void pauseApp() { ... } public void destroyApp(boolean unconditional) { ... } } 클래스명MIDlet.java Mobile Programming

  41. MIDlet 프로그램의 기본 구조 (8) • 그래픽 기반 미들렛 프로그램 구조 (계속) import javax.microedition.lcdui.*; class 클래스명Canvas extends Canvas { public 클래스명Canvas() { ... } public void paint(Graphics g) { ... } } 클래스명Canvas.java Mobile Programming

  42. MIDlet 프로그램의 기본 구조 (9) • Canvas 클래스 객체화 • Canvas 클래스를 상속받아 ‘클래스명Canvas’클래스에서 paint() 메소드에 Graphics 객체를 이용하여 원하는 형태를 구현한다. • 클래스 선언 • Canvas 클래스를 상속받아‘클래스명Canvas’클래스를 선언한다. • Canvas 클래스는낮은 수준의 이벤트를 처리하고, 출력 장치로 이동할 때는 그래픽을 호출하는 응용 프로그램을 작성한다. • paint() 메소드 • Canvas를 렌더링하는 메소드다. • 그래픽을 화면에 출력하려면 반드시 구현해야 한다. • paint() 메소드 블록에 정의된 내용이 그대로 화면에 표시된다. Mobile Programming

  43. 간단한 MIDlet 프로그램 예제 (1) • 문자열 출력 프로그램 FirstMIDlet.java 01 import javax.microedition.midlet.MIDlet; 02 import javax.microedition.lcdui.*; 03 04 public class FirstMIDlet extends MIDlet{ 05 private Display display; 06 private TextBox textbox; 07 08 public FirstMIDlet() { 09 display = Display.getDisplay(this); 10 textbox = new TextBox("First MIDlet", "첫 번째 미들렛", 20, TextField.ANY); 11 } 12 public void startApp() { 13 display.setCurrent(textbox); 14 } 15 public void pauseApp() { } 16 public void destroyApp(boolean unconditional) { } 17 } 실행 결과 화면 Mobile Programming

  44. 간단한 MIDlet 프로그램 예제 (2) • 도형과 문자열 출력 프로그램 SecondMIDlet.java 01 import javax.microedition.midlet.*; 02 import javax.microedition.lcdui.*; 03 04 public class SecondMIDlet extends MIDlet { 05 private Display display; 06 private SecondCanvas canvas_; 07 08 public SecondMIDlet() { 09 display = Display.getDisplay(this); 10 canvas_ = new SecondCanvas(); 11 } 12 public void startApp() { 13 display.setCurrent(canvas_); 14 } 15 public void pauseApp() { } 16 public void destroyApp(boolean unconditional) { } 17 } 18 실행 결과 화면 Mobile Programming

  45. 간단한 MIDlet 프로그램 예제 (3) • 도형과 문자열 출력 프로그램 (계속) SecondMIDlet.java • 19 class SecondCanvas extends Canvas { • 20 private Font largeFont; • String explainText[] = {"[ 게임설명 ]", "본 게임은“, • "커서를 이용하여", "1분 동안 4곳의“, • "다른 부분을 찾는", "게임입니다."}; • 22 public SecondCanvas(){ • 23 largeFont = Font.getFont(Font.FACE MONOSPACE, • Font.STYLE_PLAIN, Font.SIZE_LARGE); • 24 } • 25 public void paint(Graphics g) { • 26 g.setColor(255, 255, 255); • 27 g.fillRect(0, 0, getWidth(), getHeight()); • 28 g.setColor(0, 0, 0); • 29 g.fillRoundRect(60, 60, 120, 150, 20, 20); • g.setColor(255, 255, 255); • g.setFont(largeFont); Mobile Programming

  46. 간단한 MIDlet 프로그램 예제 (4) • 도형과 문자열 출력 프로그램 (계속) SecondMIDlet.java • 32 g.drawString(explainText[0], getWidth()/2, 65, Graphics.TOP | Graphics.HCENTER); • 33 int y = 95; • for(byte i=1; i < explainText.length; i++){ • g.drawString(explainText[i], 65, y, • Graphics.TOP | Graphics.LEFT); • 36 y+=20; • 37 } • 38 } • 39 } Mobile Programming

More Related