我正在编写一个 AIR native 扩展,它必须在新的 Android 线程上做一些工作。我必须使用上下文来获取此线程中的设备信息。我在一个新线程中调用 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 不同。
关于java - 无法在新线程中从 FREContext 调用 getActivity()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797274/