Mobile:NEWS 2002年10月4日 08:06 PM 更新

ビジネスiアプリ入門(8)
待ち受けビジネスIMの実機テスト&評価(1/2)

待ち受けビジネスIMを待ち受けiアプリとして完成させ、実機テストと評価を行う

 今回は作成したビジネスIMを待ち受けiアプリとして完成させます。実機でのテストと評価を行い、利点・欠点を挙げ、改良を検討します。

待ち受けビジネスIMの完成イメージ

 ビジネスIMを待ち受け化するにあたって、まず待ち受けiアプリの3状態(活性化、非活性化、休眠)時に、それぞれどのような動作をするか決定します。待ち受けiアプリの状態に関する詳細は、第2回記事を参照してください。

 待ち受けiアプリでは、操作中は活性化、そのほかではできる限り休眠状態にし、さらに必要に応じて非活性化状態を使って消費電力を抑えるような設計が基本でした。ビジネスIMにおいて非活性化状態を使用するのは、定期的に状態を取得するアクセス時になります。各状態における役割をまとめると以下のようになります。ビジネスIMの待ち受け化に関する詳細は、第3回記事を参照してください。

状態機能遷移条件
活性化状態メッセージの作成、送信
状態更新活性化ボタンで非活性化し休眠へ
非活性化状態メッセージ、状態の取得取得終了後、休眠状態へ
休眠状態その他一定時間おきに非活性化状態へ

ビジネス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()を使用しないようなコードとしてください。

◆待ち受けビジネスIMソースコード

[福野泰介, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

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



モバイルショップ

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

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