Не можете вызвать 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.