FREContext クラスの拡張

FREContext オブジェクトは、Java 関数のセットと、コンテキストに特化した状態を提供します。拡張は、FREContext クラスの具象サブクラスを少なくとも 1 つ実装する必要があります。

FREContext クラスには、実装しなくてはならない 2 つの抽象メソッドが定義されています。

  • getFunctions() — Map オブジェクトを返す必要があります。この Map オブジェクトは、AIR ランタイムで、コンテキストにどのような関数が提供されているかを調べるときに使用されます。

  • dispose() — コンテキストリソースのクリーンアップが可能になったとき、ランタイムによって呼び出されます。

コンテキストの破棄

拡張の ActionScript 側では、ExtensionContext インスタンスの dispose() メソッドを呼び出すことができます。ActionScript の dispose() メソッドを呼び出すと、ランタイムによって Java の FREContext クラスの dispose() メソッドが呼び出されます。

ActionScript 側で dispose() を呼び出さない場合は、ランタイムのガベージコレクターが、ExtensionContext インスタンスに対する参照がなくなったときに、そのインスタンスを破棄します。その時点で、ランタイムによって Java の FREContext クラスの dispose() メソッドが呼び出されます。

FREContext の例

次に示す例は、FREContext の単純な実装です。クラス内で、関数 1 つを含んだ関数マップを作成しています。

package com.example; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import android.util.Log; 
 
import com.adobe.fre.FREContext; 
import com.adobe.fre.FREFunction; 
     
public class ExtensionContext extends FREContext { 
    private static final String CTX_NAME = "ExtensionContext"; 
    private String tag; 
 
    public ExtensionContext( String extensionName ) { 
        tag = extensionName + "." + CTX_NAME; 
        Log.i(tag, "Creating context"); 
    } 
 
    @Override 
    public void dispose() { 
        Log.i(tag, "Dispose context"); 
    } 
 
    @Override 
    public Map<String, FREFunction> getFunctions() { 
        Log.i(tag, "Creating function Map"); 
        Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); 
 
        functionMap.put( UsefulFunction.KEY, new UsefulFunction() ); 
        return functionMap; 
    } 
 
    public String getIdentifier() { 
        return tag; 
    } 
}