ビジネスiアプリ入門(8)
|
状態 | 機能 | 遷移条件 |
活性化状態 | メッセージの作成、送信 | |
状態更新 | 活性化ボタンで非活性化し休眠へ | |
非活性化状態 | メッセージ、状態の取得 | 取得終了後、休眠状態へ |
休眠状態 | その他 | 一定時間おきに非活性化状態へ |
ビジネスIMの状態別機能
待ち受けビジネスIMの実装
では、第2回記事を参考に、ビジネスIMを待ち受け化します。まず現在IApplicationとなっているAクラスをMApplicationに変更し、待ち受け用のメソッドを追加します
public class A extends MApplication implements KeyListener {
public void keyPressed(Panel panel, int key) {
}
public void keyReleased(Panel panel, int key) {
// 待ち受けボタンで非活性化状態、休眠状態への遷移
if (key == Display.KEY_IAPP) {
setWakeupTimer(INTERVAL * 1000); // INTERVAL秒後に復帰
deactive = true;
deactivate();
sleep();
}
}
boolean deactive = true; // 非活性化状態であることを示すフラグ
public void processSystemEvent(int type, int param) {
if (type == FOLD_CHANGED_EVENT) {
if (deactive) {
// フリップイベントがきたらすぐに休眠状態へ
sleep(); // 再び休眠状態に移行する
}
} else if (type == MODE_CHANGED_EVENT) {
deactive = false;
}
}
static final int INTERVAL = 10; // 10秒おきにサーバと通信
待ち受けiアプリ化コード
Panelにおいてキーを取得するには、KeyListenerを使用します。待ち受けボタンの離された状態を取得し、非活性化状態、休眠状態に遷移するようにします。この時、指定時間後(INTERVAL)にイベントを発生するように設定します。
deactiveは、非活性化状態であることを示すフラグです。待ち受けボタンが押され、非活性化状態になったり、活性化状態になったりした場合に書き換えます。
次に非活性化時のデータの更新を実装します。一定時間おきに更新する処理は、状態表示パネル(StateViewPanelクラス)のrunメソッドで処理していました。このメソッドを、非活性化時にはThread.sleepではなくWakeupTimerを使ってINTERVALの時間ごとに通信するように変更します。
// 一定時間置きに更新するスレッド処理
public void run() {
for (;;) {
if (Display.getCurrent() == this) {
Message[] message = network.update(data); // dataを更新する
writeData(data); // dataをスクラッチパッドに書き出す
memberview.setItems(data.getMemberNamesAndState()); // dataを画面に反映する
new ReceiveMessagePanel(this, message);
}
if (deactive) {
setWakeupTimer(INTERVAL * 1000); // INTERVAL秒後に復帰
sleep(); // 非活性化状態なら再び休眠状態に移行する
}
try {
for (int i = 0; i < INTERVAL; i++) {
if (deactive)
break;
Thread.sleep(1000); // 1秒待ち
}
} catch (Exception e) {
}
}
}
待ち受けiアプリ対応のデータ更新コード
deactiveがtrueの状態の時、setWakeupTimerでタイマを設定しsleepを呼び出してJavaVMは停止します。タイマイベントが発生すると、sleepメソッドから復帰し続きを実行しますが、deactiveがtrueなので、Thread.sleepせずに通信部を呼び出すことになります。
ADF設定で待ち受け設定をし(MyConcierge=Yes)、エミュレータで待受け起動を選択し、起動してください。また今回の変更は、通常起動を考慮していないので、通常起動からも使用する場合は、deactivate()やsleep()を使用しないようなコードとしてください。
[福野泰介, ITmedia]
Copyright © ITmedia, Inc. All Rights Reserved.
前のページ | 1/2 | 次のページ
最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!
最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!