2016-03-24 3 views
0

У меня есть мобильное приложение Flex для iOS и Android. По соображениям производительности, я хотел бы переместить часть моего кода загрузки в Рабочего. У меня около 20 классов Java, которые десериализуются в ActionScript после вызова RemoteObject для загрузки данных с сервера. Каждый из этих классов имеет на нем тег метаданных [RemoteClass(alias="com.mycompany.MyClass")]. Когда в моем основном приложении, все это отлично работает. Однако у Работника нет псевдонимов классов, зарегистрированных для каждого из этих классов. Это означает, что когда я получаю данные с сервера, это все общие классы Object вместо моих собственных классов ActionScript. Я смог обработать данные правильно, только после ручной перерегистрации этих псевдонимов классов для всех 20 классов в Рабочем месте, используя registerClassAlias("com.mycompany.MyClass", MyClass);Алиасы класса RemoteObject в ActionScript Worker

Мне не нравится, что я должен поддерживать псевдонимы в двух разных местах. Есть ли способ поддерживать псевдонимы классов между моим главным swf и моим Рабочим?

ответ

0

Это может произойти не из-за того, что Worker забывает о метаданных, а потому, что рабочий является отдельным приложением в терминах AS3. Компилятор выбрасывает все ваши классы, которые не используются явно.

Так у вас есть два варианта:

1) Использование классов явно в Worker

public class Worker extends ... { 
    private static const FORCE_INCLUDE:Array = [MyClass1, MyClass2]; 
} 

2) Используйте [ArrayElementType] метаданные, которые forbides comiler бросить классы из

public class Worker extends ... { 
    [ArrayElementType("full.path.to.MyClass1")] 
    [ArrayElementType("full.path.to.MyClass2")] 
    public function Worker() { ... } 
} 

Также может быть возможно указать ArrayElementType непосредственно в классе Worker, а не на конструкторе Worker.