我正在编写一个AIR Native Extension,它必须在新的Android Thread上做一些工作。我必须使用上下文来获取此线程中的设备信息。我在一个新的线程段中调用FREContext的getActivity方法。
在我的FREContext扩展类中,我有:
public class MyExtensionContext extends FREContext {
public void doThreadWork() {
new Thread(new Runnable() {
@Override
public void run() {
// calling com.adobe.fre.FREContext.getActivity(), crashes here
Activity act = getActivity();
}
}
}
}
根据Adobe文档,不允许在正在运行的FREFunction线程之外访问FREObject。 FREContext和新线程是否存在类似情况?
最佳答案
好的,事实证明我无法直接从FREContext调用getActivity()。我必须通过FREFunction进行设置:
public class MyFunction implements FREFunction {
@Override
public FREObject call(FREContext context, FREObject[] passedArgs) {
MyExtensionContext mec = (MyExtensionContext) context;
// Set a local variable in MyExtensionContext to getActivity value
mec.act = mec.getActivity();
mec.doThreadWork();
return null;
}
}
我的FREContext现在看起来像这样:
public class MyExtensionContext extends FREContext {
public Activity act;
public void doThreadWork() {
new Thread(new Runnable() {
@Override
public void run() {
// Do stuff with Activity "act" here
}
}
}
}
我不确定这为什么行得通,因为这似乎是一个额外的步骤,获得了相同的getActivity()值,但可能是此Activity是在与FREContext不同的时间创建的。