ランタイムは、ネイティブ側の拡張初期化関数を呼び出します。拡張を使用するアプリケーションが実行されるたびに 1 回だけ初期化関数を呼び出します。具体的には、任意のコンテキストで拡張が
ExtensionContext.createExtensionContext()
を最初に呼び出したときに、ランタイムは初期化関数を呼び出します。
初期化関数は、すべての拡張コンテキストが使用できるデータを初期化します。拡張の initializer 関数は、
FREInitializer()
のシグネチャを使用して定義します。
次に、例を示します。
void MyExtensionInitializer
(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,
FREContextFinalizer* ctxFinalizerToSet)
{
extDataToSet = NULL; // This example does not use any extension data.
*ctxInitializerToSet = &MyContextInitializer;
*ctxFinalizerToSet = &MyContextFinalizer;
}
FREInitializer()
メソッドを定義すると、次のデータがランタイムに返されます。
-
ランタイムが後で新しい拡張コンテキストのそれぞれに渡すデータへのポインター。例えば、すべての拡張コンテキストが同じユーティリティライブラリを使用する場合、このデータにはライブラリへのポインターを含めることができます。このデータは「拡張データ」と呼ばれます。
ユーザーが選択したどのデータも拡張データとすることができます。単純なプリミティブデータ型や、ユーザー定義の構造体へのポインターを、拡張データとして使用できます。この例では、ポインターは
NULL
です。これは、拡張がこのデータを使用しないからです。
-
コンテキスト初期化関数へのポインター。ActionScript 側が
ExtensionContext.createExtensionContext()
を呼び出すたびに、ランタイムはユーザーが指定する拡張コンテキスト初期化関数を呼び出します。
FREContextInitializer()
を参照してください。
-
コンテキストファイナライザー関数へのポインター。ランタイムは、拡張コンテキストを破棄するときにこの関数を呼び出します。この呼び出しは、ActionScript 側が ExtensionContext インスタンスの
dispose()
メソッドを呼び出すと発生します。
dispose()
が呼び出されない場合は、ランタイムは ExtensionContext インスタンスのガベージコレクションを行います。
FREContextFinalizer()
を参照してください。
アプリケーションバンドル拡張では、
FREInitializer()
の実装は任意の名前に設定できます。拡張記述ファイル内に初期化関数の名前を指定します。
ネイティブ拡張記述ファイル
を参照してください。
デバイスバンドルアプリケーションでは、拡張の initializer 関数の指定方法はデバイスによって異なります。
次のシーケンス図に、AIR ランタイムが FREInitializer() 関数を呼び出す様子を示します。また、コンテキストの初期化についても示します。詳しくは、
拡張コンテキストの初期化
を参照してください。