|
MID 프로필 | ||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES All Classes |
See:
Description
Class Summary | |
MIDlet | MIDlet 은 MID 프로필 응용 프로그램입니다.
|
Exception Summary | |
MIDletStateChangeException | 요청된 MIDlet 상태 변경 신호가 실패했습니다.
|
MIDlet 패키지는 MIDP (Mobile Information Device Profile)
응용 프로그램 및 응용 프로그램과 응용 프로그램이 실행되는
환경 사이의 상호 작용을 정의합니다.
Mobile Information Device Profile의 응용 프로그램은
MIDlet
입니다.
MIDP는 장치의 제한된 자원을 다중 MIDP 응용 프로그램 또는 MIDlet이 공유하도록 하는 응용 프로그램 모델을 정의합니다. 또한 MIDlet, 패키지 방법, MIDlet에 유용한 런타임 환경, 장치가 자원을 관리할 수 있는 작동 방법 등을 정의합니다. 이 응용 프로그램 모델은 suite를 형성하는 여러 MIDlet을 함께 패키지화하고 단일 Java 가상 머신 컨텍스트 내에서 자원을 공유할 수 있는 방법을 정의합니다. 제한된 자원 및 보안 프레임워크에서는 클래스 파일을 공유하고 단일 정책 및 컨트롤 집합에 의존해야 하기 때문에 공유하는 것이 좋습니다.
MIDP 응용 프로그램은 개발, 테스트, 배포 및 실행될 때 MIDP 사양에 지정된 기능만 사용해야 합니다.
MIDlet Suite의 요소는 다음과 같습니다.
각 장치는 사용자가 MIDlet을 설치, 선택, 실행 및 제거하는 데 필요한 기능을 구현합니다. 응용 프로그램 관리 소프트웨어라는 용어는 이러한 장치별 기능을 통칭할 때 사용됩니다. 응용 프로그램 관리 소프트웨어는 MIDlet이 설치, 시작, 정지 및 설치 제거되는 환경을 제공하며 MIDlet Suite를 설치, 실행 및 제거하는 동안 발생한 오류를 처리하고 필요하면 사용자와 상호 작용합니다. 또한 MIDP 사양에 필요한 Java 런타임 환경을 MIDlet에 제공합니다.
하나 이상의 MIDlet이 단일 JAR 파일로 패키지화될 수 있습니다.
각 MIDlet은 MIDlet
클래스를 확장하는 클래스 및
MIDlet이 필요로 할 수 있는 기타 클래스로 구성되어 있습니다.
JAR 파일의 매니페스트에는 MIDlet의 설치 및 실행 중에 사용되는
속성이 들어 있습니다. MIDlet은 응용 프로그램
관리 소프트웨어가 시작하는
엔티티입니다. MIDlet Suite를 호출하면 클래스를 실행할 수 있는
Java 가상 머신이 필요합니다.
응용 프로그램 관리 소프트웨어에 의해 MIDlet의 새 인스턴스가 만들어지고
이 인스턴스는 MIDlet이 자신을 시작, 일시 중지 및
완전 삭제할 때 사용됩니다.
여러 MIDlet 사이의 데이터 및 기타 정보의 공유는 개별 API 및 구현에 의해 제어됩니다. 예를 들어, 레코드 관리 시스템 API는 MIDlet Suite에 연관된 레코드 저장소가 MIDlet 사이에서 공유될 때 사용되는 메소드를 지정합니다.
MIDP 1.0 사양에서는 각 MIDlet Suite가 샌드 박스에서 작동하도록 제한하여 MIDlet에 대해 사용할 수 있는 모든 API가 장치의 민감한 기능에 액세스하지 못하도록 합니다. 이 사양에서는 이러한 샌드 박스 개념을 사용하며 신뢰할 수 없는 모든 MIDlet Suite는 이 제한 사항의 적용을 받습니다. 이 사양의 모든 구현은 신뢰할 수 없는 MIDlet Suite 실행을 지원해야 합니다.
MIDP 2.0에는 민감하고 제한적인 API 사용이 허용되는, 신뢰할 수 있는 응용 프로그램 개념이 도입되었습니다. 장치에서 MIDlet Suite를 신뢰할 수 있는 것으로 판단하면 정책에 표시된 대로 액세스를 허용합니다. MIDP 응용 프로그램 보안 절은 신뢰할 수 없는 응용 프로그램과 신뢰할 수 있는 응용 프로그램의 개념 및 기능을 설명합니다.
MIDP는 MIDlet에 제공된 실행 환경을 정의합니다. MIDlet Suite의 모든 MIDlet이 실행 환경을 공유하며 모든 MIDlet은 패키지화된 다른 MIDlet과 상호 작용할 수 있습니다. 응용 프로그램 관리 소프트웨어는 응용 프로그램을 시작하고 MIDlet에 다음을 사용할 수 있도록 합니다.
CLDC 및 Java 가상 머신은 다중 스레드, 잠금 및 동기화, 바이트 코드의 실행, 메소드 디스패치 등을 제공합니다. VM 하나가 모든 정책, 이름 지정 및 자원 관리를 포괄합니다. 장치에서 다중 VM을 지원하면 각각 고유한 범위, 이름 지정 및 자원 관리 정책을 가질 수 있습니다. MIDlet Suite는 CLDC 또는 MIDP가 정의한 패키지의 클래스는 포함하지 말아야 합니다.
MIDP는 MIDP API를 구현하는 클래스를 제공합니다. 구현 시 응용 프로그램 프로그래머가 보호된 시스템 패키지에 클래스를 대체, 수정 또는 추가할 수 없도록 해야 합니다.
JAR 파일 하나에는 모든 MIDlet의 클래스가 포함되어 있습니다. MIDlet은 JAR 파일, MIDP 또는 CLDC 클래스의 메소드를 로드 및 호출할 수 있습니다. 세 가지 범위 내의 모든 클래스는 JAR 파일의 MIDlet 실행 환경에서 공유됩니다. 이러한 클래스를 통해 액세스할 수 있는 모든 상태는 MIDlet을 대신하여 실행하는 Java 클래스에 사용할 수 있습니다. MIDlet Suite가 사용하는 모든 MIDlet, MIDP 및 CLDC의 객체를 포함하는 단일 공간이 있습니다. 동시 처리 문제를 피해야 할 때에는 일반적인 Java 잠금 및 동기화 프리미티브를 사용해야 합니다. 각 라이브러리는 다중 스레드 환경에서 안전하게 실행하기 위한 동시 처리 방법 및 MIDlet의 라이브러리 사용 방법을 지정합니다.
MIDlet의 클래스 파일은 실행에만 사용할 수 있고, 자원으로 읽거나 재사용을 위해 추출할 수 없습니다. CLDC의 구현 시 적합한 방법으로 JAR 파일의 내용을 저장 및 해석할 수 있습니다.
Java 클래스 파일이 아닌 JAR 파일의 파일은
java.lang.Class.getResourceAsStream
을
이용하여 사용할 수 있습니다.
예를 들어, 매니페스트를 이러한 방법으로 사용할 수 있습니다.
MIDlet 설명자 파일(있는 경우)의 내용은
javax.microedition.midlet.MIDlet.getAppProperty
메소드를 통해 사용할 수 있습니다.
하나 이상의 MIDlet을 다음을 포함하는 단일 JAR 파일로 패키지화합니다.
개발자는 대상 사용자, 장치, 네트워크, 로켈 및 해당 지역에 적절한 JAR 파일의 구성 요소를 만들고 분산시켜야 합니다. 예를 들어, 특정 로켈의 경우 자원 파일은 해당 로켈에 필요한 문자열 및 이미지를 포함하도록 수정됩니다.
JAR 매니페스트는 응용 프로그램 관리 소프트웨어가 MIDlet Suite를 식별 및 설치하거나 응용 프로그램 설명자에서 찾지 못한 속성의 기본값으로 사용할 속성을 정의합니다. 속성은 매니페스트 및 선택적 응용 프로그램 설명자에서 사용하기 위해 정의됩니다.
응용 프로그램 관리 소프트웨어는 아래에 나열된 미리 정의된 속성을 사용하여 MIDlet을 식별, 검색, 설치 및 호출할 수 있습니다.
속성 이름 |
속성 설명 |
---|---|
MIDlet-Name
|
사용자가 MIDlet을 식별할 수 있는 MIDlet Suite 이름 |
MIDlet-Version
|
MIDlet Suite의 버전 번호. 버전 번호는 응용 프로그램 관리 소프트웨어가 설치 및 업그레이드뿐 아니라 사용자와의 통신용으로 사용할 수 있도록 포맷됩니다. |
MIDlet-Vendor |
MIDlet Suite를 제공하는 조직 |
MIDlet-Icon |
MIDlet Suite를 나타내는 데 사용된 JAR 내 PNG 파일의 대소문자를 구분하는 절대 이름. 응용 프로그램 관리 소프트웨어가 suite를 식별하기 위해 아이콘을 표시할 때 사용되어야 합니다. |
MIDlet-Description |
MIDlet Suite의 설명 |
MIDlet-Info-URL |
MIDlet Suite를 자세히 설명하는 정보 URL. 구문 및 의미는 각 체계를 정의한 RFC2396 및 관련 RFC를 준수해야 합니다. |
MIDlet-<n> |
쉼표로 구분된 JAR 파일의 n번째 MIDlet 이름, 아이콘 및 클래스. <n>의 최저값은 1이어야 하고 연속적 서수가 사용되어야 합니다. 누락 항목이 발견되면 바로 목록을 종료합니다. 추가 항목은 무시됩니다. 이름, 아이콘 및 클래스의 선행 공백 및 후행 공백은 무시됩니다.
|
MIDlet-Jar-URL |
JAR 파일을 로드할 수 있는 URL. 구문 및 의미는 각 체계를 정의한 RFC2396 및 관련 RFC를 준수해야 합니다. 절대 및 상대 URL이 반드시 지원되어야 합니다. 상대 URL의 컨텍스트는 응용 프로그램 설명자가 로드된 URL입니다. |
MIDlet-Jar-Size |
JAR 파일의 바이트 수 |
MIDlet-Data-Size |
MIDlet에 필요한 영구 데이터의 최소 바이트 수. 장치는 고유 정책에 따라 추가 저장소를 제공할 수 있습니다. 기본값은 0입니다. |
MicroEdition-Profile |
시스템 등록 정보
|
MicroEdition-Configuration |
시스템 등록 정보
|
MIDlet-Permissions |
MIDlet Suite의 기능에 꼭 필요한 0개 이상의 권한. 자세한 사용법은 MIDlet Suite 보안 절을 참조하십시오. |
MIDlet-Permissions-Opt |
MIDlet Suite의 기능에 중요하지 않은 0개 이상의 권한. 자세한 사용법은 MIDlet Suite 보안 절을 참조하십시오. |
MIDlet-Push-<n> |
인바운드 연결을 처리할 MIDlet을 등록합니다. 자세한 내용은 javax.microedition.io.PushRegistry를 참조하십시오. |
MIDlet-Install-Notify |
자세한 내용은 OTA 사양을 참조하십시오. |
MIDlet-Delete-Notify |
자세한 내용은 OTA 사양을 참조하십시오. |
MIDlet-Delete-Confirm |
자세한 내용은 OTA 사양을 참조하십시오. |
일부 속성은 여러 개의 값을 사용하며 특별히 언급하지 않는 한 해당 값들은 쉼표(유니코드 U+002C)로 구분됩니다. 각 값에서 선행 공백과 후행 공백(유니코드 U+0020) 및 탭(유니코드 U+0009)은 무시됩니다.
버전 번호는 Major.Minor[.Micro] (X.X[.X])의 형식을 가지며 여기서 .Micro 부분은 생략될 수 있습니다. .Micro 부분이 생략되지 않은 경우 기본값은 0입니다. 또한 버전 번호의 각 부분에는 최대 두 자리 십진수를 사용할 수 있습니다(예: 0-99). 버전 번호는 Java(TM) Product Versioning Specification http://java.sun.com/products/jdk/1.2/docs/guide/versioning/spec/VersioningSpecification.html에서 설명됩니다.
예를 들어, 1.0.0은 MIDlet Suite의 첫 번째 버전을 지정하는 데 사용될 수 있습니다. 버전 번호의 각 부분 앞에 오는 0은 중요하지 않습니다. 예를 들어, 08은 8과 같고, 1.0은 1.0.0과 같습니다. 하지만 1.1은 1.0.1이 아니라 1.1.0과 같습니다.
누락된 MIDlet-Version 태그는 0.0.0으로 간주하며 0이 아닌 버전 번호는 MIDlet Suite의 새 버전으로 간주된다는 것을 의미합니다.
매니페스트는 JAR 파일의 내용에 대한 정보를 제공합니다.
JAR 파일 형식 및 사양은
http://java.sun.com/products/jdk/1.2/docs/guide/jar/index.html에서 사용할 수 있습니다.
구문 및 관련된 자세한 내용은 JDK JAR와 매니페스트
설명서를 참조하십시오.
MIDP 구현 시 매니페스트 사양에서
정의한 72바이트보다 긴 행의 처리를 반드시 구현해야 합니다.
속성은 매니페스트 내에서
한 번 이상 표시되지 않아야 합니다.
속성이 중복되면 효과를 알 수 없습니다.
속성이 응용 프로그램 설명자에서 중복되지 않으면
매니페스트 속성은 요청 시
MIDlet.getAppProperty
메소드를 사용하여 MIDlet에 전달됩니다.
중복 속성 처리에 대한 자세한 내용은
"응용 프로그램 설명자" 절을 참조하십시오.
매니페스트에는 다음 속성이 포함되어야 합니다.
매니페스트 또는 응용 프로그램 설명자에는 다음 속성이 포함되어야 합니다.
매니페스트에는 다음 속성이 포함될 수 있습니다.
MIDlet-
또는 MicroEdition-
으로
시작하지 않는 응용 프로그램별 속성예를 들어, 카드 게임의 가상 suite에 대한 매니페스트는 다음 예와 같습니다.
|
MIDlet에 필요한 모든 Java 클래스는
디렉토리 및 파일 이름에
정규화된 클래스 이름을 매핑하여
표준 구조를 사용하는 JAR 파일에 배치됩입니다.
각 마침표는 슬래시로 변환되고
.class
확장자가 추가됩니다.
예를 들어, com.sun.microedition.Test
클래스는 com/sun/microedition/Test.class
라는
이름의 JAR 파일에 배치됩니다.
각 JAR 파일은 응용 프로그램 설명자를 가질 수 있습니다. 응용 프로그램 관리 소프트웨어는 응용 프로그램 설명자를 JAR 매니페스트와 함께 사용하여 MIDlet을 관리하고 MIDlet 자체는 응용 프로그램 설명자를 구성별 속성에 사용합니다. 장치의 응용 프로그램 관리 소프트웨어는 설명자를 사용하여 MIDlet이 MIDlet Suite의 전체 JAR 파일을 로드하기 전 장치에 적합한지 확인할 수 있습니다. 구성별 속성(매개 변수)은 설명자를 사용하여 JAR 파일을 수정하지 않고 MIDlet에 제공됩니다.
장치가 MIDP 응용 프로그램 관리 소프트웨어에 응용 프로그램 설명자를 디스패치하도록 허용하기 위해 파일 확장자와 MIME 유형이 IANA에 등록됩니다.
jad
입니다.
text/vnd.sun.j2me.app-descriptor
입니다.
미리 정의된 속성 집합이 지정되면 응용 프로그램 관리 소프트웨어가
MIDlet을 식별, 검색 및 설치할 수 있습니다.
설명자 파일에 표시되는 모든 속성은 MIDlet에서 사용할 수 있습니다.
개발자는 응용 프로그램별 목적을 위해 MIDlet-
또는 MicroEdition-
으로 시작하지 않는 속성을
사용할 수 있습니다. 속성 이름은
대소문자를 구분하고 정확하게 일치해야 합니다.
속성은 매니페스트 내에서
한 번 이상 표시되지 않아야 합니다.
속성이 중복되면 효과를 알 수 없습니다.
MIDlet은 MIDlet.getAppProperty
메소드를 호출하여
이름으로 속성을 검색합니다.
응용 프로그램 설명자에는 다음 속성이 포함되어야 합니다.
응용 프로그램 설명자에는 다음 속성이 포함될 수 있습니다.
MIDlet-
또는 MicroEdition-
으로
시작하지 않는 응용 프로그램별 속성필수 속성인 MIDlet-Name, MIDlet-Version 및 MIDlet-Vendor는 응용 프로그램을 고유하게 식별하기 때문에 설명자 및 매니페스트 파일에 중복되어야 합니다. 이러한 속성이 동일하지 않으면 JAR을 설치하지 않아야 합니다.
응용 프로그램 설명자의 기타 매니페스트 속성을 중복할 필요는 없으며 값은 매니페스트 파일 및 설명자 파일에 신뢰할 수 없는 MIDlet Suite의 동일한 속성이 포함되더라도 다를 수 있습니다. MIDlet Suite를 신뢰할 수 없는 경우 설명자 파일의 값이 매니페스트 파일의 값을 대체합니다. MIDlet Suite를 신뢰할 수 있는 경우 응용 프로그램 설명자의 값은 매니페스트 파일의 해당 속성 값과 동일해야 합니다.
MIDlet은 관련된 Configuration 및 Profile(예: CLDC 및 MIDP)
사양에서 정의한 것 외의 MIDlet-
또는
MicroEdition-
으로 시작하는 매니페스트나
응용 프로그램 설명자에 속성을 추가하지 않아야 합니다.
AMS는 인식되지 않은 속성을 무시해야 합니다.
일반적으로 응용 프로그램 설명자의 형식은 속성 이름, 콜론, 속성 값 및 캐리지 리턴의 순으로 구성되는 여러 줄로 되어 있습니다. 값 앞뒤의 공백은 무시됩니다. 속성의 순서는 관계 없습니다.
응용 프로그램 설명자는 전송이나 저장을 위해 인코딩될 수 있으며
구문 분석하기 전 아래 규칙을 사용하여 유니코드로 변환되어야 합니다.
예를 들어, ISO-8859-1로 인코딩된 파일은 적합한 인코딩을 갖는
java.io.InputStreamReader
의 동일한 방식을 통해
읽어야 합니다. 설명자를 전송하는 기본 문자 인코딩은 UTF-8입니다.
지원되는 경우 HTTP를 통해 검색된 설명자는
UCS-2의 스트림을 변환하기 위해 Content-Encoding 헤더
및 Content-Type 문자 집합 매개 변수와 같이 표준 HTTP 내용
협상 기법을 사용해야 합니다.
|
예를 들어, 카드 게임의 가상 suite에 대한 응용 프로그램 설명자는 다음 예와 같습니다.
|
각 MIDlet은 MIDlet
클래스를 확장해야 합니다.
MIDlet
클래스는 MIDlet의 순차적 시작,
중지 및 정리를 허용합니다. MIDlet은 응용 프로그램 관리 소프트웨어와
통신하기 위해 응용 프로그램 설명자에서 인자를 요청할 수 있습니다.
MIDlet Suite는 public static void main()
메소드를
갖지 않아야 합니다. 이 메소드가 있으면
응용 프로그램 관리 소프트웨어가 이를 무시해야 합니다.
응용 프로그램 관리 소프트웨어는 MIDlet을 시작하기 위해
CLDC가 요구하는 초기 클래스를 제공합니다.
MIDlet Suite가 장치에 설치되면 클래스, 자원 파일, 인자 및 영구 저장소가 장치에 유지되어 사용할 수 있는 상태가 됩니다. 사용자는 장치의 응용 프로그램 관리 소프트웨어를 통해 MIDlet을 사용할 수 있습니다.
MIDlet이 실행될 때 MIDlet의 주 클래스의 인스턴스는
public 형식의 인자가 없는 구성자를 사용하여 만들고
MIDlet
의 메소드는
다양한 상태에 따라 MIDlet을 배열합니다.
MIDlet은 상태의 변경을 요청하거나 MIDlet
메소드를 통해
응용 프로그램 관리 소프트웨어에게 상태 변경을 알릴 수 있습니다.
응용 프로그램 관리 소프트웨어가 MIDlet을 중단 또는 종료하면
MIDlet이 완전 삭제되고 MIDlet이 만든 객체 및 클래스를 포함하여
MIDlet이 사용했던 자원은 재생 이용할 수 있습니다.
MIDlet은 System.exit
를 호출하지 않아야 하며
호출하는 경우 SecurityException
이
발생합니다.
Java 클래스의 일반 상태는 로드될 때 이러한 클래스에 영향을 받지 않습니다. 특정 클래스를 참조하면 해당 클래스가 로드되고 일반적인 정적 초기화가 수행됩니다.
javax.microedition.midlet 의
클래스
|
설명 |
---|---|
|
응용 프로그램 관리 소프트웨어가 MIDlet을 시작, 중지 및 완전 삭제할 수 있도록 확장됩니다. |
|
응용 프로그램이 요청된 변경 작업을 수행할 수 없을 때 발생합니다. |
MIDlet
라이프사이클은
다음을 통해 MIDlet
과 환경 사이의
프로토콜을 정의합니다.
간단히 잘 정의된 상태 시스템
MIDlet 상태의 간단한 정의
상태 간 변화를 전달하는 API
다음 정의가 MIDlet
라이프사이클에
사용됩니다.
응용 프로그램 관리 소프트웨어 -
MIDlet
을 관리하는 장치의 소프트웨어 운영 환경의 부분.
MIDlet 상태를 유지하고
MIDlet
이 상태 변화를
거치게 합니다.
MIDlet
- 장치의 MIDP 응용 프로그램.
MIDlet
은 실행 또는 완료 여부에 대해
응용 프로그램 관리 소프트웨어에 알릴 수 있습니다.
MIDlet
은 MIDlet
API를 통해
다른 MIDlet
에 대한 정보를 갖고 있지 않습니다.
MIDlet
상태 - MIDlet
이
가질 수 있는 상태는 MIDlet
인터페이스를 통해
허용되는 전이에 의해 정의됩니다.
보다 많은 특정 응용 프로그램 상태가 응용 프로그램에 알려집니다.
MIDlet
상태 시스템은 응용 프로그램의
동작이 일관되고 다음과 같이 장치 제조업체 및
사용자가 예상하는 것에
가능한 가깝도록 설계되었습니다.
응용 프로그램의 인식된 시작 대기 시간은 매우 짧아야 합니다.
응용 프로그램을 활성화되지 않은 상태로 둘 수 있어야 합니다.
언제라도 응용 프로그램을 완전 삭제할 수 있어야 합니다.
MIDlet
의
유효한 상태는 다음과 같습니다.
상태 이름 | 설명 |
---|---|
일시 중지 |
|
활성 |
|
완전 삭제 |
주: 이 상태는 한 번만 될 수 있습니다. |
MIDlet
의 상태 및 전이는 다음과 같습니다.
MIDlet
실행의 일반적인 순서는 다음과 같습니다.
응용 프로그램 관리 소프트웨어 |
MIDlet
|
---|---|
응용 프로그램 관리 소프트웨어가
|
|
응용 프로그램 관리 소프트웨어는
|
|
응용 프로그램 관리 소프트웨어는 전화 호출이나
다른 MIDlet을 실행하는 장치의
다른 기능에서 임시로 사용할 수 있도록
MIDlet이 소모하고 있는 자원의 양을 상당히 줄이려고 합니다.
AMS가 |
|
응용 프로그램 관리 소프트웨어는 |
해당 작업을 하도록 설계된 경우 |
pauseApp
- MIDlet
은 임시 자원을
해제하고 수동 상태가 되어야 합니다.
startApp
- MIDlet
은
필요로 하는 자원을 획득하고 다시 시작해야 합니다.
destroyApp
- MIDlet
은 상태를
저장하고 모든 자원을 해제해야 합니다
notifyDestroyed
- MIDlet
은
응용 프로그램 관리 소프트웨어에게 삭제되어
완료되었음을 알립니다.
notifyPaused
- MIDlet
은
응용 프로그램 관리 소프트웨어에게 일시 중지되었음을 알립니다.
resumeRequest
- MIDlet
은
응용 프로그램 관리 소프트웨어에게 다시 시작하도록 요청합니다.
getAppProperty
- MIDlet
에서
명명된 등록 정보를 얻습니다.
응용 프로그램은 MIDlet
메소드의 실행에서
경합 상태를 피하기 위해 각각의 상태를 확인해야 합니다.
각 메소드는 상태 변화 동안 동시성 문제를 피하기 위해
다른 메소드와 동기화될 수 있습니다.
다음 예는 MIDlet 라이프사이클을 사용하여 Java 가상 머신의 속도를 간단하게 측정합니다.
import javax.microedition.midlet.*;
/**
* An example MIDlet runs a simple timing test
* When it is started by the application management software it will
* create a separate thread to do the test.
* When it finishes it will notify the application management software
* it is done.
* Refer to the startApp, pauseApp, and destroyApp
* methods so see how it handles each requested transition.
*/
public class MethodTimes extends MIDlet implements Runnable {
// The state for the timing thread.
Thread thread;
/**
* Start creates the thread to do the timing.
* It should return immediately to keep the dispatcher
* from hanging.
*/
public void startApp() {
thread = new Thread(this);
thread.start();
}
/**
* Pause signals the thread to stop by clearing the thread field.
* If stopped before done with the iterations it will
* be restarted from scratch later.
*/
public void pauseApp() {
thread = null;
}
/**
* Destroy must cleanup everything. The thread is signaled
* to stop and no result is produced.
*/
public void destroyApp(boolean unconditional) {
thread = null;
}
/**
* Run the timing test, measure how long it takes to
* call a empty method 1000 times.
* Terminate early if the current thread is no longer
* the thread from the
*/
public void run() {
Thread curr = Thread.currentThread(); // Remember which thread is current
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000 && thread == curr; i++) {
empty();
}
long end = System.currentTimeMillis();
// Check if timing was aborted, if so just exit
// The rest of the application has already become quiescent.
if (thread != curr) {
return;
}
long millis = end - start;
// Reporting the elapsed time is outside the scope of this example.
// All done cleanup and quit
destroyApp(true);
notifyDestroyed();
}
/**
* An Empty method.
*/
void empty() {
}
}
|
MID 프로필 | ||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES All Classes |