Java Can';是否在新线程中从FREContext调用getActivity()?
我正在编写一个AIR原生扩展,它必须在一个新的Android线程上做一些工作。我必须使用上下文来获取此线程中的设备信息。我正在一个新线程中调用FREContext的getActivity方法,该线程将segfults 在我的FREContext扩展类中,我有:Java Can';是否在新线程中从FREContext调用getActivity()?,java,android,multithreading,apache-flex,air-native-extension,Java,Android,Multithreading,Apache Flex,Air Native Extension,我正在编写一个AIR原生扩展,它必须在一个新的Android线程上做一些工作。我必须使用上下文来获取此线程中的设备信息。我正在一个新线程中调用FREContext的getActivity方法,该线程将segfults 在我的FREContext扩展类中,我有: public class MyExtensionContext extends FREContext { public void doThreadWork() { new Thread(new Runnab
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线程之外访问FREObjects。FREContext和新线程是否存在类似的情况 好的,事实证明我不能直接从上下文调用getActivity()。我必须通过我的函数进行设置:
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;
}
}
现在,我的上下文如下所示:
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()值,但可能是此活动是在与FREContext不同的时间创建的。理论上,它应该通过调用oFREContext.getActivity()来工作。但有时它会崩溃。我不知道为什么。