リソースとは、アプリケーションによって使用されるファイルを指します。
UJMLアプリケーションのほとんどは、ごく一部の単純なものを除いて、なんらかの外部ファイルを使用します。 関連項目: UJMLファイルの種類。 外部ファイルは実行、あるいはリンクする外部のUJMLコードの場合があります。 関連項目: ファイルの実行、 ファイルのリンク。 外部ファイルはメディアファイルの一種である場合もあります。 関連項目: メディアファイル。 原則として、UJMLがなんらかの方法で使用するファイルは全て「リソース」です。 UJMLはリソースを管理するための言語要素、イベントと関数を豊富に用意しています。
URLは「Uniform Resource Locator」の略です。URLはアプリケーションが必用としているリソース(ファイル) を指定する方法の1つです。リソースはデバイス内(デバイスのファイルシステム)に存在する場合と、 ネットワーク越しのサーバーに存在する場合があります。URLの形式は要求されたリソースを取得する方法を決定します。 必用なりソースURLは文字列リテラル、スクリプティングコード中の変数の値、またはurl要素を 使用して指定します。 関連項目: スクリプティング、 url。
デバイスによって、サポートされている画像や音声ファイルの形式はことなります。 _image_url()と_sound_url()関数はランタイム時に、 汎用的なURL参照をデバイスの推奨ファイル形式に適応させる手段を提供しています。 関連項目: 画像サポート、 音声サポート、 _image_url() function、 _sound_url() function。
UJMLはデバイスがファイルシステムを備えている場合fileプロトコルの使用を、デバイスがネットワーク接続を 備えている場合はhttpプロトコルの使用を提供しています。 デバイスによっては、その他のプロトコルがサポートされているものもあります。 プロトコルの指定が省略されている場合、UJMLはアプリケーションを読み込む際に使用されたプロトコルを使用します。 FileプロトコルやカスタムプロトコルのURLの形式はデバイスによって異なりますが、 httpプロトコルの形式は全てのデバイスに共通です。
一般的なリソースの場合、UJMLは次の手順を実行します:
リソースの管理方法はアプリケーションに依存します。 アプリケーションには、全てのリソースを個別のファイルまたは1つのパッケージとしてデバイスのファイルシステムに格納する管理方法を取るものがあります。 関連項目: パッケージファイル。 またリソースを明示的に管理せず、一部あるいは全てのリソースをネットワークから取得する方法を取るアプリケーションもあります。 しかしネットワークリソースを多用するアプリケーションにおいて優れた使い勝手を提供するには、 UJMLコードの中でリソースの有無を管理することが重要です。UJMLはリソース管理を行うためのイベント、関数そして 要素を豊富に提供しています。UJMLはまた、リソースの読み込みに障害があった場合でもアプリケーションを引き続き実行させる ためのデフォルトの動作を提供しています。
リソースはメモリに読み込まれるまで使用することができません。 読み込みが行われている間、リソースを必要としているコードは無視されます。 これは、リソースがメモリに読み込まれデコードが完了するまで、画像は表示されず、音声ファイルは再生されないことを意味します。 しかしUJMLアプリケーションはリソースの読み込みの完了を待つことなく、通常のように実行を継続します。 使用するリソースが実行、あるいはリンクされるUJMLアプリケーション・パーティションであっても同様のことが起こります。 アプリケーションまたはパーティションの読み込みが失敗しても、UJMLプログラムの実行は継続します。 関連項目: ファイルの実行、 ファイルのリンク。
UJMLはネットワークの動作に合わせてトリガーされるイベントを提供しています。 関連項目: イベントの処理、 リソース管理イベント。 これらのイベントはネットワークリソースの読み込みに失敗(あるいは成功)した場合に特定の処理を行う イベントハンドラの作成に使用できます。イベントハンドラを利用するとエラーメッセージの表示や、 アプリケーションの終了、状況に応じたアプリケーションの動作を変更、といったことが可能になります。
一度読み込まれたネットワークリソースは、_discard()関数を使用して明示的に廃棄する場合を 除き、アプリケーションが終了する際にデバイスのファイルシステムにキャッシュされます。 そのためアプリケーションが次回実行された際には、ネットワークアクセスを行うことなくリソースを利用することが可能になります。 関連項目: _discard() function。
UJMLはまた、resources要素、_prefetch()関数、そして _nocacheURL修飾子を通じて、細やかなリソース管理を可能にしています。
resources要素は、リソースを使用するコードに頼ることなく、 コードリソースの有効期間を明示的に制御することを可能にします。 resources要素を子要素としてもつステートトランジションが有効になると、 UJMLはresource要素で宣言されている全ファイルのデバイスメモリへの読み込みと保持を試みます。 デバイス内に存在しないファイルはネットワーク越しに読み込まれます。 関連項目: resources、 resource。
ひとたび読み込まれたファイルは、ステートランジションが無効になるかUJML アプリケーションが終了しない限り、デバイスのメモリに格納され続けます。 ステートトランジションが無効になると、リクエスト中のネットワークアクセスはキャンセルされ、 UJMLアプリケーションの他の場所で使用されていないファイルはデバイスメモリから開放されます。
resource要素には、特定のリソースの読み込みの成功/失敗を明示するイベントハンドラを記述することができます。 関連項目: イベントの処理、 リソース管理イベント。
_discard()関数はデバイスのファイルシステムにキャッシュされているネットワークリソースを廃棄します。 関連項目: _discard() function。 指定したリソースがデバイスに存在しない場合、この関数はなにも効果を持ちません。
_prefetch()関数はネットワークを通じて、リソースをデバイスのファイルシステムに取得します。 しかしresourceと異なり、_prefetch()関数で取得した リソースはデコードされず、メモリにも読み込まれません。 関連項目: _prefetch() function。 URLがデバイスのファイルシステム上にあるリソースを参照している場合、 あるいはリソースがすでにネットワークから取得されている場合、この関数はなにも効果を持ちません。
特定のネットワークリソースが常にサーバーから読み込まれることを保障したい場合は、リソースURLのどこかに '_nocache' を記述します。 例えば、'http://www.example.com/images/_nocache_myimage.gif'と 'http//www.example.com/_nocache/images/myimage.gif' の両URLはどちらも '_nocache'の妥当な使用例です。1つ目のURLではファイル名の一部に、 2つ目のURLではディレクトリの名前に_nocacheが記述されています。 ドメイン名の一部に記述した_nocacheも同様の効果を持ちます。
|
項目 |
説明 |
|
UJMLはネットワーク状況とリソースの有無を検出するためのイベントを提供している。 |
次の例では、resource要素を使用して音声ファイルをデバイスのメモリに読み込んでいます。 音声ファイルの読み込みに失敗した場合、互換性のある、異なる音声ファイルの読み込みを試みます。 このサンプルコードはevents.ujml サンプルコードの一部です。
<resources>
<resource>
<url><eval>mSoundURL</eval></url>
<event name="onResourceAvailable">
<script>
showMessage(_strcat("onResourceAvailable: ", mSoundURL));
mSoundLoaded = true;
</script>
</event>
<event name="onResourceError">
<variables>
<var name="preferredFormat" type="string"/>
</variables>
<script>
showMessage(_strcat("onResourceError: ", mSoundURL));
preferredFormat =
_getStringProperty(&_PROPERTY_STRING_PREFERRED_SOUND_EXTENSION;);
// Try for a fallback URL?
if (!mSoundFallback)
{
// 関連項目: if there is a fallback we can do.
if (!_streq(preferredFormat, "mid"))
{
// Try .mid
if (_isSupported(&_SOUND_TYPE_MID;))
{
mSoundURL = "snd/sound.mid";
mSoundFallback = true;
_clear_state(sLoadSounds);
sLoadSounds = true;
}
}
else if (!_streq(preferredFormat, "wav"))
{
// Try .wav
if (_isSupported(&_SOUND_TYPE_WAV;))
{
mSoundURL = "snd/sound.wav";
mSoundFallback = true;
_clear_state(sLoadSounds);
sLoadSounds = true;
}
}
// Are we still not doing a fallback?
if (!mSoundFallback)
{
sLoadSounds = false;
}
}
else
{
sLoadSounds = false;
}
</script>
</event>
</resource>
</resources>|
Copyright (c) 2000-2005 by UIEvolution, Inc. All rights reserved.
|
|
この項目に関するフィードバックをお寄せください。 Send feedback!
|