ヘッダーをスキップ

Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発 リリース2.1.2 E64870-01 |
| 目次

前 | 次 |

# 11 MAFアプリケーションでのライフサイクル・リスナーの使用方法

この章では、MAFアプリケーション・エディタとMAF機能エディタを使用してモバイル・アプリケーションのSpringboardおよびナビゲーション・バーの表示動作を定義し、アプリケーション機能を埋め込むことでコンテンツを指定する方法について説明します。

この章の内容は次のとおりです。

- 第11.1項「MAFアプリケーションでのライフサイクル・イベント・リスナーの使用について」

- 第11.2項「アプリケーション機能ライフサイクル・リスナー・クラスについて」

## 11.1 MAFアプリケーションでのライフサイクル・イベント・リスナーの使用について

MAFランタイムでは、クラスが様々な`LifeCycleListener`メソッドを実装して、ネイティブ・オペレーティング・システムのフレームワークからJVMに送信されるイベント通知を伝達します。これらのイベント通知は、モバイル・アプリケーションと埋込みのアプリケーション機能の両方の様々な状態(起動、停止または休止)について記載しています。MAFは、汎用的な起動メッセージを使用して、JVMでクラス関数を呼び出します。

MAFアプリケーション・エディタおよびMAF機能エディタでは、イベント発生時にMAFがコールするライフサイクル・リスナー・クラスを宣言的に追加できます。

モバイル・アプリケーションを作成すると、OEPEによって、アプリケーション用の`LifeCycleListenerImpl.java`というライフサイクル・リスナー・クラスが作成されます。このファイルを使用して、特定のメソッドを実装できます(第25章「通知の有効化と使用方法」を参照)。Lifecycle Eventsサンプル・アプリケーションでは、MAFアプリケーション・エディタおよびMAF機能エディタの両方でイベント・リスナー・クラスを宣言する例が提供されます。

このサンプル・アプリケーションを操作するには、「ファイル」→「新規MAFサンプル」を選択し、LifecycleEventsを選択し、「終了」をクリックします。

### 11.1.1 モバイル・アプリケーションのイベント

アプリケーション・ライフサイクル・イベントを実行するには、モバイル・アプリケーションのライフサイクル・リスナー・クラスで、次の例に示すとおり`LifeCycleListener`インタフェースの`start`、`stop`、`activate`および`deactivate`メソッドを実装する必要があります。

    package oracle.adfmf.application;

    public interface LifeCycleListener
    {
       void start();
       void stop();
       void activate();
       void deactivate();
    }

注意: アプリケーション・ライフサイクル・リスナーは、匿名ユーザーによって実行されます(つまり、そのリスナーのメソッドにはどのユーザーも関連付けられず、セキュアなWebサービスもコールされません)。

次の例の`AppListener`クラスでは、イベントを開始または停止するために`LifeCycleListener`メソッド・コールを使用します。また、アプリケーションを休止させる(`deactivate`)場合や、休止から戻す(`activate`)場合にも、これらのメソッド・コールを使用します。詳細は、第11.1.2項「モバイル・アプリケーション・イベントのタイミング」を参照してください。Oracle Mobile Application Framework Java APIリファレンスでLifeCycleListenerインタフェースも参照してください。

    package some.package;
    import oracle.adfmf.application.LifeCycleListener;

    public class AppListener implements LifeCycleListener
    {
        public AppListener()
        {
            super();
        }
        public void start()
        {
            // Perform application startup tasks...
        }
        public void stop()
        {
            // Perform tasks to stop the application...
        }
        public void activate()
        {
            // Perform appplication activation tasks...
        }
        public void deactivate()
        {
            // Perform application deactivation tasks...
        }
    }

LifeCycleEventsサンプル・アプリケーション(付録G「サンプルのMAFアプリケーション」を参照)のアプリケーション・コントローラ・プロジェクトには、`LifeCycleListener`インタフェースを実装するクラス(`LifeCycleListenerImpl.java`)があります。

注意: 起動ライフサイクル・コードを実行する前に、マネージドBeanとデータ・バインディングを初期化する必要があります。

### 11.1.2 モバイル・アプリケーション・イベントのタイミング

MAFは、モバイル・アプリケーションの起動時、シャットダウン時、休止時における特定のタイミングでアプリケーション・ライフサイクル・メソッドをコールします。表11-1は、これらのメソッドがコールされるタイミングと、各イベントに対応するObjective-Cを示しています。

表11-1 MAFライフサイクル・メソッド

メソッド | タイミング | いつコールされるか | 使用方法 | iOSアプリケーション委任メソッドとの関係
--- | --- | --- | --- | ---
`start` | モバイル・アプリケーションがアプリケーション機能を完全にロードした後、ユーザーに最初のアプリケーション機能またはSpringboardを表示する直前にコールされます。これはブロック化コールです。 | アプリケーションの処理が開始されたとき。 | 次の使用方法があります。 モバイル・アプリケーションの更新があるかどうかを確認する。 ローカル・データベースにデータをダウンロードするよう、リモート・サーバーにリクエストする。 | このイベントは特定のアプリケーション委任メソッドには対応していません。`maf-application.xml`ファイルと`maf-feature.xml`ファイルのロード後、スプラッシュ画面が非表示になる直前にコールされます。
`stop` | モバイル・アプリケーションがシャットダウンを開始するときにコールされます。 | アプリケーションの処理が終了したとき。 | 次の使用方法があります。 任意のリモート・サービスからログオフする。 アプリケーションが終了する前に、データの変更をサーバーにアップロードする。 | アプリケーション委任の`applicationWillTerminate:`メソッド内でコールされます。
`activate` | モバイル・アプリケーションをバックグラウンドにある(休止)状態からアクティブ化するときにコールされます。これはブロック化コールです。 | `start`メソッドがコールされた後。 | 次の使用方法があります。 キャッシュ・ストアを読み取り、再移入する。 Webサービス・リクエストを処理する。 必要なリソースを取得する。 チェックポイントを適用する。詳細は、第11.1.3項「アクティブ化および非アクティブ化メソッドを使用したアプリケーションの状態の保存」を参照してください。 | アプリケーション委任の`applicationDidBecomeActive:`メソッド内でコールされます。
`deactivate` | モバイル・アプリケーションを非アクティブ化し、バックグラウンドに移動する(休止)ときにコールされます。これはブロック化コールです。 | `stop`メソッドがコールされる前。 | 次の使用方法があります。 リストア可能な状態を書き込む。 チェックポイントを適用する。詳細は、第11.1.3項「アクティブ化および非アクティブ化メソッドを使用したアプリケーションの状態の保存」を参照してください。 データベース・カーソルとデータベース接続を閉じる。 | アプリケーション委任の`applicationWillResignActive:`メソッド内でコールされます。

### 11.1.3 アクティブ化および非アクティブ化メソッドを使用したアプリケーションの状態の保存

チェックポイントの適用によってアプリケーションの状態が保存されるため、ユーザーは、チェックポイント・エントリを`activate`および`deactivate`メソッドに追加することによって、休止前にアクティブであったモバイル・アプリケーションの最後のページを引き続き使用できます。ライフサイクル・リスナーは、`activate`クラスに追加されたチェックポイント・エントリを読み取り、アプリケーションが休止から戻った後、処理を再開できるようにします。ユーザーは再度ログインする必要がなくなるため、アプリケーションを中断することなく引き続き使用できます。休止中にアプリケーションが終了した場合、`deactivate`メソッドの一部として、チェックポイント情報をデータベースまたはデバイスのキャッシュ・ディレクトリに書き込むよう指定することによって、アプリケーションを再開できるようになります。アクティブ化中にこのチェックポイント情報を読み取ることによって、アプリケーションが同じページから再開されます。

## 11.2 アプリケーション機能ライフサイクル・リスナー・クラスについて

モバイル・アプリケーション機能ライフサイクル・リスナー・クラス(次の例の`FeatureListenerPhoneList`など)では、`LifeCycleListener`インタフェースの`activate`および`deactivate`メソッドを実装する必要があります。

    package oracle.adfmf.feature;
    public interface LifeCycleListner
    {
       void activate();
       void deactivate();
    }

次の例は、`FeatureListenerPhoneList`と呼ばれるクラスを示しています。このクラスでは、`LifeCycleListener`を実装することで、`activate`および`deactivate`メソッドを使用してアプリケーション機能を表示/非表示にします(表11-2を参照)。これらのメソッドでは、アプリケーション機能をアプリケーションの休止時に非表示にしたり、休止から戻ったときに表示したりできます。

注意: Oracle Mobile Application Framework Java APIリファレンスで説明されているように、`activate`および`deactivate`メソッドはブロック化コールです。これらのメソッドは、完全に実行されるまで、ユーザー・インタフェースを停止させるので、実行時間の長い処理がこれらのメソッドに含まれている場合は、別のアプリケーション機能のアクティブ化に遅延が生じます。アプリケーションにおいて実行時間の長い処理がアプリケーションの非アクティブ化の前に完了しなくてもよい場合は、その処理をこれらのメソッドに含めるのでなく、バックグラウンド・スレッドに含めてください。

    package some.package;
    import oracle.adfmf.feature.LifeCycleListener;
    public class FeatureListenerPhoneList implements LifeCycleListener
    {
        public FeatureListenerPhoneList()
        {
            super();
        }
        public void activate()
        {
            // Perform application activation tasks...
        }
        public void deactivate()
        {
            // Perform application deactivation tasks...
        }
    }

ヒント: LifeCycle Eventsサンプル・アプリケーションでは、`Feature1Handler.java`および`Feature2Handler.java`ファイルにより、アプリケーション機能レベルで`LifeCycleListener`インタフェースを使用する例が提供されています。これらのファイルは、ビュー・コントローラ・プロジェクトのApplication Sourcesフォルダ内にあります。

### 11.2.1 アプリケーション機能のライフサイクルでイベントをアクティブ化および非アクティブ化するタイミング

アプリケーション機能ライフサイクル・リスナー・クラスを実装することによって、アプリケーション機能で、`applicationScope`変数や、アプリケーション機能が非アクティブ化されたときに変更されたアプリケーション機能固有の変数に対する、すべてのデータ変更を自動的に取得できるようになります。表11-2は、アプリケーション機能に対してactivateイベントおよびdeactivateイベントを実行するタイミングを示しています。詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

表11-2 アプリケーション機能に対するactivateおよびdeactivateメソッド

メソッド | タイミング | いつコールされるか | 使用方法
--- | --- | --- | ---
`activate` | 現在のアプリケーション機能がアクティブ化される前にコールされます。 | ユーザーがモバイル・アプリケーションの起動後に初めてアプリケーション機能を選択したとき、またはアプリケーション機能が再選択されたとき(つまり、フォアグラウンドに戻されたとき)にコールされます。 | 次の使用方法があります。 `applicationScope`変数を読み取る。 最初のMAF AMXビューにおける現在の行を設定する。
`deactivate` | 次のアプリケーション機能がアクティブ化される前、またはアプリケーション機能が終了する前にコールされます。 | ユーザーが別のアプリケーション機能を選択したときにコールされます。 | たとえば、`deactivate`イベントを使用して、`applicationScope`変数や、次のアプリケーション機能が使用するその他の状態情報を記述できます。

### 11.2.2 スライディング・ウィンドウの有効化

`oracle.adfmf.framework.api.AdfmfSlidingWindowUtilities`インタフェースをアプリケーション・ライフサイクル・リスナー(ALCL)に実装することにより、アプリケーション機能をスライディング・ウィンドウとして使用できます。このウィンドウは、ナビゲーション・バーまたはSpringboard内に表示される他のアプリケーション機能と同時に表示されます。スライディング・ウィンドウは、アプリケーション内に常に存在しているコンテンツ(グローバル・ツール・バー)を表示するために使用したり、一時的な(ポップアップ)コンテンツ(ヘルプ・ウィンドウなど)を表示するために使用したりできます。Springboardまたはナビゲーション・バー内でアプリケーション機能を表示する方法の詳細は、第5.1項「MAFアプリケーションの表示動作の概要」を参照してください。`AdfmfSlidingWindowUtilities` APIのメソッドを使用する方法の詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。