2010-12-14 11 views
0

アプリケーションが完全に閉じられたときに、いくつかのアプリケーション生成ファイルをクリーンアップする必要があります。クローズはどの画面からでも行うことができます。アプリケーションの各画面でonClose()をオーバーライドするのではなく、どのメソッドまたはどこをCapular Menu Closeイベントにグローバルにオーバーライドする必要がありますか?アプリケーションがどの画面から終了するかを知るために上書きする方法

アプリケーションの途中でMenu Closeを使用してアプリケーションを閉じると、スタック上の各画面に対してonClose()が呼び出され、スタックからポップされるか、メモリからアプリケーションが削除されますか?

答えて

1

私はあなたが望むものを正確に行う方法はないと思っていますが、あなたが望む動作を得ることができると思います。最初に、私が行ったテストに基づいて、クローズメニュー項目は単に現在の画面に対してonClose()を呼び出します。デフォルトのクローズメニュー項目は、アプリケーション全体を閉じるわけではなく、1つの画面を閉じるだけです。

私が考えることができる最も近い方法はdeactivate()です。これは、アプリがバックグラウンドに送信されたときに呼び出されますが、実際には閉じられていないときには呼び出されません(赤い「終了呼び出し」ボタンを押してもこのメソッドが呼び出されますメニューの[閉じる]を押した場合)。これはおそらく過剰ですが、あなたができることは、起動時に自動実行を選択することと、BlackBerry App Descriptorの「BlackBerryホーム画面にアプリケーションアイコンを表示しない」を選択することです。これにより、アプリケーションは常にユーザーの目に見えないようになり、常にホーム画面にアイコンが表示され、UIを表示する代替エントリポイントを作成するGUIが表示されます。ユーザーが閉じるメニュー項目を選択すると、アプリケーションがバックグラウンドに送信され、クリーンアップコードがdeactivate()に置かれます。

もっと良いアプローチは、親クラスのonClose()をオーバーライドして、すべての画面をそのクラスから継承させることです。クリーンアップコードをそこに置くことができます。または、閉じるメニュー項目をすべて閉じるには、makeMenu()メソッドをオーバーライドし、System.exit()を呼び出す前に適切なクリーンアップコードを実行するMenuItemを追加します。

0

私のアプリでは、すべての画面を共通の親クラスから継承しているだけです。その親クラスでは、標準の出口処理を実装します。

スクリーンがポップされたときに実行されるコードを配置する正しい場所はScreen.onUiEngineAttached(boolean)です。このメソッドは、画面がディスプレイスタックから実際にプッシュまたはポップされたときに呼び出されます。他のメソッドは、メニュー項目の動作や汚れた画面操作をオーバーライドする場合にのみ関係します。

別のオプションはすべて、この動作を処理する単一のリスナーオブジェクトを持っていること、およびディスプレイ・スタック上にプッシュする前にすべての画面にそれを購読するScreen.addScreenUiEngineAttachedListener()を使用します。

関連する問題