如果试图在 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 仍将变得无效。