无法在新线程中从FREContext调用getActivity()?

时间:2014-04-01 21:31:23

标签: java android multithreading flex air-native-extension

我正在编写一个AIR Native Extension,它必须在新的Android Thread上做一些工作。我必须使用Context来获取此Thread中的设备信息。我在新线程中调用FREContext的getActivity方法,即segfaults。

在我的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和新线程是否有类似的情况?

1 个答案:

答案 0 :(得分:2)

好的,事实证明我无法直接从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()值的额外步骤,但可能是在与FREContext不同的时间创建此Activity。