一个
FREObject
类实例表示一个 ActionScript 类对象或基元类型。在 Java 实现中使用 FREObject 实例操作 ActionScript 数据。FREObject 的一个主要用途是用于 Java 函数参数和返回值。
FREObject 类提供函数用于访问关联的 ActionScript 类对象或基元值。所用的 Java API 取决于 ActionScript 对象的类型。这些类型可以是:
-
ActionScript 基元数据类型
-
ActionScript 类对象
-
ActionScript String 对象
-
ActionScript Array 或 Vector 类对象
-
ActionScript ByteArray 类对象
-
ActionScript BitmapData 类对象
重要说明:
您只能在正在运行“所拥有的”FREFunction 函数的同一线程中访问 FREObject。此外,如果您已调用任何 FREByteArray 或 FREBitmapData 对象的
acquire()
方法,则您在调用此原始 FREByteArray 或 FREBitmapData 对象的
release()
方法之前,无法访问任何对象的 ActionScript 方法。如果“获取”了任何对象,调用该对象或其他 FREObject 的
getProperty()
、
setProperty()
或
callMethod()
将引发 IllegalStateException 异常。
FREObject 有效性
如果试图在 Java API 调用中使用无效
FREObject
,Java API 将引发异常。
任何 FREObject 实例只在调用堆栈上的第一个 FREFunction 函数返回之前有效。调用堆栈上的第一个 FREFunction 函数是运行时由于 ActionScript 端调用 ExtensionContext 实例的
call()
方法而调用的函数。FREObject 也只在运行时用来调用第一个 FREFunction 的线程中有效。
注:
FREFunction 函数可以间接调用其他 FREFunction 函数。例如,
FREFunctionA()
可以调用 ActionScript 对象的方法。该方法随后可以调用
FREFunctionB()
。
因此,在使用 FREObject 时,应考虑以下事项:
-
传递给 FREFunction 实例的任何 FREObject 只在调用堆栈上的第一个 FREFunction 函数返回之前有效。
-
任何 Java 函数创建的任何 FREObject 只在调用堆栈上的第一个 FREFunction 返回之前有效。
-
不能在另一线程中使用 FREObject。只能在与 Java 函数用于接收或创建 FREObject 对象的同一线程中使用该对象。
-
例如,在两次调用 FREFunction 函数之间,无法在全局数据中保存 FREObject 引用。由于在调用堆栈上的第一个 FREFunction 函数返回后,该对象将变得无效,因此保存的引用将没有用处。但是,在两次函数调用之间,可以使用 FREContext 类的
setActionScriptData()
方法保存数据。
-
FREObject 失效后,对应的 ActionScript 对象仍然可以存在。例如,如果 FREObject 是 FREFunction 函数的返回值,其对应的 ActionScript 对象将仍然被引用。但是,一旦 ActionScript 端删除其引用,运行时将立即释放 ActionScript 对象。
-
在扩展间无法共享 FREObject。
注:
但可以在同一扩展的扩展上下文之间共享 FREObject。不过即使这样,无论是哪种情况,在调用堆栈上的第一个 FREFunction 函数返回到运行时后,FREObject 仍将变得无效。
|
|
|