本ページでは、Xletのライフサイクルについて説明する。
XletはApplication Managerによる制御で以下の5状態のいずれかを取る。
- Unloaded:未ロード状態
- Loaded: Xletインタフェースを実装したクラスのインスタンスが生成された状態
- Paused: Xlet.initXlet()メソッドが呼び出し完了直後、あるいはXlet.pauseXletメソッドの呼び出し後
- Active: Xlet.startXlet()メソッドの呼び出し後
- Destroyed: Xlet.destroyXlet()メソッドの呼び出し後
XletのライフサイクルはBD-J Titleのそれと密接に結びついており、典型的には以下の形態を採る。
- あるTitleを選択した際、そのTitleに属するXletがApplication Managerを通じて自動クラスロードされる(Loaded状態に遷移)
- Application Managerからの制御により、Active状態やPaused状態に遷移
- 別のTitleに切り替わる際 *1 、Application Managerを通じて実行中のXletは停止・破棄される(Destroyed状態に遷移)
XletとTitleの関連付けはBD-J Object fileで定義し、あるBD-J Titleで実行するXletはそのBD-J Titleに対応するBD-J Object file内のapplicationManagementTableで宣言しておく必要がある。
また、javax.tv.xlet.XletContextを通じて、Xletは自身の状態遷移をApplication Managerに要求することもできる。例えばXletContext.notifyDestroyed()で自己終了の要求となる。なお、XletContextはinitXlet()メソッドで渡されるものを用いる。
以下はライフサイクル制御のバリエーションである。
ページコンテンツ
自動起動(AUTOSTART)
Title選択時にクラスロードだけでなく自動起動(AUTOSTART)することが可能である。クラスロードするだけ(PRESENT)か自動起動(AUTOSTART)にするかはapplicationManagementTableのcontrolCodeで指定する。
他のXletからの制御(AppProxy)
org.dvb.application.AppProxyを使うことで、他のXletからApplication Managerを通じて、起動も含めXletのライフサイクルを制御することが可能である。なお、自分が起動したもの以外のXletを制御する場合、署名つきでなければならない。
Titleを跨いだXletの継続実行(Title unbound application)
BDメディアを跨いだXletの継続実行(Disc unbound application])
Xletによる自己終了(notifyDestroyed)
上述のようにXlet自身からApplication Managerに対して自己終了を要求することができる。この場合、destroyXlet()は呼び出されないため、リソース開放等は完了しておく必要がある。
関連する項目
- BD-J Object file: Xletに関する各種情報をApplicationmanagementTableに格納
- MHP: Xletのライフサイクルについて、9.1節および9.2節に詳しく説明されている。
- Xletの制御とXlet状態遷移イベントの取得: AppProxyのサンプルコード
- Xletの自己終了: XletContext.notifyDestroyed()のサンプルコード