Mobile:NEWS 2003年11月21日 11:30 PM 更新

BREW プログラミング入門(5)
イベント処理って何だ?(1/2)

前回は文字列の扱い方について解説しました。今回はBREWのイベント処理について学びます。

 今回はBREWのイベント処理について学びます。

イベントハンドラ

 すでに何度も出てきているように、ユーザーがアプレットを開始したり、携帯電話のキーを押したときに、BREW実行環境はイベントハンドラを呼び出します。イベントハンドラのプロトタイプは次のようになります。

boolean EventHandler
(
    IApplet* pApplet,   // アプレット構造体
    AEEEvent evt,       // イベントコード
    uint16 wParam,      // イベント パラメータ (16ビット)
    uint32 dwParam      // イベント パラメータ (32ビット)
);

※このプロトタイプの説明は、「BREW APIリファレンス」のAEEHANDLER の項目、または、IAPPLET_HandleEvent の項目にあります。

 pApplet 引数にはIApplet*やAEEApplet*、あるいは、独自のアプレット構造体のポインタを受け取ることになります。この引数に実際に何が渡されるかは、AEEClsCreateInstance() 関数内で、アプレット構造体として何を作成したかに依存します。このことについては本連載の第3回で解説しましたので、理解が不十分な方は復習しておきましょう。

 次に、evt引数ですが、これは通知されたイベントの種類を表す定数です。これを“イベントコード”と呼びます。例えば、「ユーザーが携帯電話のキーを押しましたよー」というイベントであれば、EVT_KEYというイベントコードが渡されます。BREWで定義されているイベントコードについては、後ほど詳しく説明します。

 wParamとdwParam引数は、“イベントパラメータ”といって、イベントに付随するさまざまな情報を格納している引数で、その意味はイベントコードにより異なります。例えば、「ユーザーが携帯電話のキーを押しましたよー」というイベントであれば、wParamに押したキーの種類を表す定数が渡されます。

イベントハンドラでは長時間の処理をしてはいけない

 イベントハンドラを記述するときに注意しなければならないのは、「イベントハンドラでは、長時間に渡る処理をしてはいけない」ということです。一つのイベントに対して、長い処理を行いますと、BREW実行環境は、アプレットを強制的に終了させてしまいます。これは、携帯電話の機能が麻痺しないように保護するためです。

 実際にどれくらいの処理時間までが許可されるかは端末により異なりますが、だいたい1秒以内に処理すべきだといわれているようです。

 それでは、ファイルシステムの読み書きやネットワーク通信などの、時間のかかる処理はどのように行ったらよいでしょうか。いくつか方法があります。

[A] タイマーやユーザー定義のイベントを利用して、時間のかかる処理を細切れにして処理する。

[B] 非同期関数を使用する。

 これらは高度な話題ですので、本連載では扱わないことにします。

BREWで定義されているイベント

 BREWのイベントの一覧を調べてみましょう。「BREW APIリファレンス」を開いて、左側の目次から、[データ型]-[イベントコード] を選択します。イベントコードの表が表示されます。

 イベントコードを調べる別の方法としては、BREW SDKをインストールしたフォルダのinc\AEE.hファイルを開いて"AEE Events"という部分を検索してみましょう。イベントコードの一覧が記述されています(このようにヘッダーファイルを調べてみることは、BREW SDKをよく理解する上で役に立ちます。ドキュメントに記述がない情報が書かれていることもあります)。

 以下に、主なイベントを抜き出してみました。

イベントコード説明
EVT_APP_STARTBREWアプレットが起動されました。何か初期化をしたいならしてください〜。
EVT_APP_STOPユーザーがBREWアプレットを終了するように言っています。終了処理が必要ならしてください〜。
EVT_APP_SUSPENDBREWアプレットを中断しますよ〜。中断の準備をしてください〜。
EVT_APP_RESUME中断したBREWアプレットを再開しますよ〜。再開の準備をしてください〜。
EVT_KEYユーザーが何かのキーを押しましたよ〜。
EVT_KEY_PRESSユーザーが何かのキーを押下しましたよ〜。
EVT_KEY_RELEASEユーザーが何かのキーを離しましたよ〜。

アプレットの開始イベント

 アプレットが開始しますと、イベントコードEVT_APP_STARTが通知されます。アプレットの初期化処理を行いたい場合、ここで行うことができます。

 イベント パラメータですが、「BREW APIリファレンス」には、「wParam=0、dwParam = const char* (引数)」と書かれていますが、これは誤りです。

 実際には、EVT_APP_STARTイベントのwParamには0が渡され、dwParamにはAEEAppStart*が渡されます。AEEAppStartは次のような構造体です。

typedef struct _AEEAppStart
{
    int error;            // 起動エラーを返す
    AEECLSID clsApp;      // アプレットID
    IDisplay * pDisplay;  // IDisplay オブジェクト
    AEERect rc;           // アプレットの長方形領域
    const char * pszArgs; // アプレットに渡された引数
} AEEAppStart;

 この構造体は、別のBREWアプレットから起動されるときに重要になるものです。アプリ間連携を行うのでなければ、使うことはないでしょう。

アプレットの終了イベント

 アプレットが終了しますと、イベントコードEVT_APP_STOPが通知されます。アプレットの終了処理を行いたい場合、ここで行うことができます。イベントパラメータについては、「BREW APIリファレンス」に以下のように書かれています。

wParam = 0、dwParam = boolean *
(アプリケーションが今終了するか、後で終了するかを指定するフラグ。 デフォルトは今)

 dwParamは、イベントを受け取ったハンドラが、BREW実行環境に値を返すためのものです。このポインタにFALSEを返すことで、EVT_APP_STOPイベントを受け取っても、「た、頼む、終了しないでくれぇ」と懇願することができますが、通常はこのパラメータは使用しません。

[倉谷智尋, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 1/2 | 次のページ



モバイルショップ

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!