Unofficial
"CLDC 1.0
+ MIDP 1.0"
API Reference.
(日本語版)

パッケージ javax.microedition.midlet

MIDlet パッケージは Mobile Information Device Profile アプリケーションとアプリケーションを実行する環境(ランタイム環境)とのインタフェースを定義します。

参照先:
          説明

クラスの概要
MIDlet MIDlet は MID Profile アプリケーション自身を示します。
 

例外の概要
MIDletStateChangeException 要求された MIDlet の状態移行が失敗あるいは拒否されたことを示す例外です。
 

パッケージ javax.microedition.midlet の説明

MIDlet パッケージは Mobile Information Device Profile アプリケーションとアプリケーションを実行する環境(ランタイム環境)とのインタフェースを定義します。 Mobile Information Device Profile のアプリケーションを MIDlet と言います。

アプリケーションのライフサイクルは、以下のように MIDlet とその環境間のプロトコルを定義します。

MIDlet ライフサイクルの定義

以下の定義が MIDlet ライフサイクルの中で使用されます。

MIDlet の状態

MIDlet を搭載するマシンは、アプリケーションの振る舞いが一貫しており、ユーザーが期待するようにどのようなデバイスにおいてもほぼ同等に動作できることを目指して設計されています。

MIDlet の有効な状態は以下の通りです。

状態名

説明

ロード後

MIDlet をロードし、初期化を行っていない状態です。 この状態へは以下の場合に遷移します。

  • MIDletnew によって作成されます。 これにより、パラメータを受け取らないコンストラクタが呼ばれ、例外を throw せずに呼び出し元へ戻ります。 アプリケーションは一般的にこのステップでは少しあるいはまったく初期化を行いません。 もし例外が throw された場合、アプリケーションは直ちに破棄状態となります。

注釈: この状態は MIDlet の1つのインスタンスに1度だけ発生します。

休止

MIDlet は初期化済みであり静止しています。 この場合、共有資源を保持していないか使用していてはなりません。 この状態へは以下の場合に遷移します。

  • アクティブ状態の際に MIDlet.pauseApp() メソッドの呼び出しに成功した場合。
  • アクティブ状態から MIDletMIDlet.notifyPaused() メソッドの呼び出しに成功した場合。

アクティブ

MIDlet は通常どおりに機能しています。 この状態へは以下の場合に遷移します。

  • 休止状態の際に MIDlet.startApp() メソッドの呼び出しに成功した場合。

破棄

MIDlet はりソースを全て開放して終了します。 この状態へは以下の場合に遷移します。

  • MIDlet.destroyApp(boolean) メソッドの呼び出しが成功した場合。 このメソッドは、確保しているリソースを全て開放し、必要なクリーンナップおよびガーベジコレクトを行います。
  • MIDlet.notifyDestroyed() メソッドの呼び出しが成功した場合。 MIDlet は、このメソッドを呼び出す前に MIDlet.destroyApp(boolean) メソッドを呼び出します。

注釈:この状態は1度だけ遷移します。



MIDlet の状態の遷移は次の通りです。




MIDlet ライフサイクル・モデル

MIDlet を実行する典型的な順序は以下の通りです。

アプリケーションマネージャー

MIDlet

アプリケーションマネージャーは MIDlet の新しいインスタンスを作成します。

MIDlet のデフォルト(引数のない)のコンストラクタを呼び出します。 これがロード後の状態です。

アプリケーションマネージャーは MIDlet を初期化します。

MIDlet は休止状態となっています。

アプリケーションマネージャーは、MIDlet を実行すると決定すると、その MIDlet をアクティブ状態に遷移するために MIDlet.startApp() メソッドを呼び出します。

MIDlet は必要とする全てのリソースを確保し、サービスを開始します。

アプリケーションマネージャーは、アクティブな MIDlet を休止する決定すると、その MIDlet を休止状態に遷移するために MIDlet.pauseApp() メソッドを呼び出します。

MIDlet はサービスを行うことをやめ、現在確保しているいくつかのリソースを開放します。

アプリケーションマネージャーは MIDlet が不要となったか、よりプライオリティの高いアプリケーションに必要なリソースを確保するため、MIDlet を破棄状態へ遷移するために MIDlet.destroyApp(boolean) メソッドを呼び出します。

アプリケーションを終了させるための準備、例えばユーザーに関する情報の保存などを行います。

MIDlet インタフェース

アプリケーションを記述する上での注意

アプリケーションは MIDlet のメソッドの実行時に競合が発生しないような措置を取るべきです。 それぞれのメソッドは、それ自身を同時に実行することを必要としている可能性があるため、他のメソッドは状態遷移中に衝突を回避しなければなりません。

MIDlet アプリケーションの例

これは、Java 仮想マシンの速度を簡単に測定するために MIDlet ライフサイクルを使用する例です。

import javax.microedition.midlet.*;

/**
 * この MIDlet の例は、簡単なタイミングテストを実行します。アプリケー
 * ションマネージャーによって開始される際に、テストを行うための別の
 * スレッドを生成します。このスレッドは、いつテストを終了するかを、
 * アプリケーションマネージャーに通知します。
 * startApp、pauseApp、destroyApp の各メソッドを使用します
 * ので、それぞれの要求をどのように扱って移行するかを確かめてください。
 */
public class MethodTimes extends MIDlet implements Runnable {
    // タイミングテストを行うスレッド
    Thread thread;

    /**
     * Start は、タイミングテストを行うスレッドを作成します。
     * このメソッドはディスパッチャーが止まるのを避けるために直ちに処理を戻すべきです。
     */
    public void startApp() {
        thread = new Thread(this);
        thread.start();
    }

    /**
     * Pause は、スレッドフィールドをクリアしスレッドを停止します。
     * 停止後に処理を再開する場合は最初からやり直します。
     */
    public void pauseApp() {
        thread = null;
    }

    /**
     * Destroy は必要なクリーンナップ処理を全て行います。
     * スレッドは停止され、結果は処理しません。
     */
    public void destroyApp(boolean unconditional) {
        thread = null;
    }

   /**
     * タイミングテストを行います。
     * 単純に 1000 回メソッド呼ぶのにかかる時間を計ります。
     * スレッドが既にカレントのスレッドでない場合は直ちに終了します。
     */
    public void run() {
        Thread curr = Thread.currentThread();  // Remember which thread is current
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000 && thread != curr; i++) {
            empty();
        }
        long end = System.currentTimeMillis();

        // タイミングテストが終了したか否かを判定します。
        // 終了している場合は何もせずに戻ります。
        // そしてアプリケーションの残りの部分は実行しません。
        if (thread != curr) {
            return;
        }
        long millis = end - start;
        // ここにこの例の範囲の外に経過時間を報告する処理が入ります。

        // 全てが終わったらクリーンナップして終了します。
        destroyApp(true);
        notifyDestroyed();
    }

    /**
     * 空のメソッド。
     */
    void empty() {
    }
}


Unofficial
"CLDC 1.0
+ MIDP 1.0"
API Reference.
(日本語版)

このAPIリファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Java Community Process 等とは一切関係ありません。したがってこのAPIリファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本APIリファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカルファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.1 + MIDP 2.0" API Reference はこちらです。