Как мне управлять восстановлением экземпляра Activity в этом сценарии? - PullRequest
0 голосов
/ 06 октября 2011

Я относительно новичок в Android, и я пытаюсь портировать приложение с iOS, которое делает что-то немного необычное.

Мое приложение имеет собственный XML-язык для представления графического интерфейса пользователя (виднаш собственный nib / xib в iOS или res / layout / what.xml в android, поверьте, у нас не было выбора), и механизм инфляции, который раздувает этот xml и создает контроллер представления и экземпляры представления.

В результате в iOS в моем приложении было несколько живых экземпляров UIViewController одного и того же класса (добавленных и удаленных из стека навигации по мере необходимости), которые были все надуты один раз (из разных XML) и оставались живыми до тех пор, покакак приложение было.

Теперь я немного не уверен в правильном способе сделать это в Android.В идеале я хотел бы иметь возможность создавать экземпляры класса Activity, каждый из которых имеет свои представления, раздутые из нашего языка XML, и выполнять навигацию между ними.Однако, насколько я понимаю, это невозможно в Android (поскольку действия начинаются с намерений и создаются классом).

  1. Правда ли, что я не смогу поддерживать активность нав то же время - не в стеке (т. е. «назад» всегда убивает действия)?
  2. Если так, значит ли это, что мне нужно раздувать действия и все их представления из xml каждый раз, когда я перемещаюсь «вперед» (серьезнопроблема производительности), или есть альтернатива?
  3. Разумно ли хотя бы сохранить разобранную структуру XML в подклассе приложения, чтобы инфляция была быстрее?
  4. Имеет ли смыслтолько отправлять (при создании) и сохранять (для постоянства) идентификатор действия в новый экземпляр действия, и он должен перейти в мой подкласс Application и раздувать себя / получать свое состояние по идентификатору?

InВ общем, предполагая, что раздувание GUI из XML является обязательным, и я хотел бы свести к минимуму необходимость повторного раздувания GUI, что бы вы предложили в качествесамое чистое решение?

Любые другие советы будут с благодарностью ... Спасибо!

1 Ответ

1 голос
/ 06 октября 2011

Я не уверен на 100%, что понимаю вашу ситуацию - я думаю, что вы говорите, что у вас есть собственный XML, который определяет ваши макеты и контроллеры.Я собираюсь ответить на основании этого, поправьте меня, если я ошибаюсь.

Во-первых, ваши вопросы показывают понимание проблем, с которыми вы сталкиваетесь, если вы идете своим текущим путем.Я не собираюсь отвечать на них по отдельности, потому что я думаю, что есть лучшее решение - использовать фрагменты через пакет совместимости .

Работа фрагментов заключается в том, что у вас есть одно действие, а затемсерия фрагментов внутри него, которые определяют пользовательский интерфейс.Для телефонов это выглядит так же, как приложение на основе активности.Но в вашем случае это обеспечит несколько бонусов:

  • Фрагменты могут быть созданы динамически в коде.

  • Фрагменты могут быть извлечены изстек, но хранится в памяти, чтобы вы могли добавить их позже.

  • Вы можете хранить весь предварительно проанализированный XML-файл в сохраненном невидимом экземпляре Fragment (вместо глобального Applicationподкласс).

Нельзя сказать, что нет никаких проблем с фрагментами - там тоже могут быть ограничения (я только недавно начал с ними работать).Но я хотел бы взглянуть на них, могут ли они решить вашу проблему.

Другая альтернатива - написать преобразование (предварительно обработанное) между вашим внутренним XML и XML для Android.Android XML View View создается довольно быстро, потому что он оптимизирован для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...