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

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

我正在编写一个 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(); 
            }
        }
    }
}

根据 Adob​​e 文档,不允许在运行的 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/

相关文章:

c# - 多进程读写一个文件

java - 在 C (JNI) 中结束 Java 线程

Java Controller 需要什么代码?

java - Android 可打包列表<String[]>

java - 在处理来自 @Index(unique=true) 的 ClientException 后,对 Neo4j 的所有后续调用都会卡住

android - ScrollableTabRow 指示器宽度以匹配 Tab 内的文本

android - 支持设计库异常

java - 哪些包必须导入?

android - ListView 在滚动时显示错误位置的图像

c - 在我实现 Lamport 的面包店算法时,线程 1 和 2 具有很高的优先级