Не можете вызвать getActivity() из FREContext в новом потоке?

Я пишу родное расширение AIR, которое должно поработать над новой нитью Android. Я должен использовать контекст, чтобы получить информацию об устройстве в этой теме. Я вызываю метод getActivity FREContext в новом потоке, который 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, доступ к объектам FREObject запрещен вне выполняющегося потока FREFunction. Есть ли похожий случай с FREContext и новыми темами?

1 ответ

Решение

Хорошо, оказывается, я не могу вызвать getActivity() напрямую из FREContext. Я должен был установить его через мою функцию 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.

Другие вопросы по тегам