有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在编写一个AIR原生扩展,它必须在一个新的Android线程上做一些工作。我必须使用上下文来获取此线程中的设备信息。我正在一个新线程中调用FREContext的getActivity方法,该线程将segfults

在我的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线程之外访问FREObjects。FREContext和新线程是否存在类似的情况


共 (1) 个答案

  1. # 1 楼答案

    好的,事实证明我不能直接从上下文调用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()值,但这可能是因为创建此活动的时间与创建上下文的时间不同