Я создал простую TabActivity, которая строит вкладки во время выполнения, считывая некоторые данные JSON. В настоящий момент я инициализирую пустую ListActivity с пустыми случайными элементами для каждой вкладки, чтобы увидеть, что переход с вкладки на вкладку работает, и содержимое не исчезает. Фактический контент для вкладок хранится в одноэлементном классе, поэтому, когда действия табуляции заново создаются из-за изменения ориентации экрана, они просто вытаскивают правильные фиктивные элементы из соответствующего списка в соответствии с идентификатором, содержащимся в комплекте с экстрактами намерения ,Почему первая активность вкладок в Android вечна?
Все работает нормально. Я поместил журнал активности списка onCreate, чтобы посмотреть, как действия воссоздаются на экране вращения, и они это делают. Однако есть что-то странное в том, что активность для первой вкладки всегда воссоздается, даже если она не видна. Когда я переключаюсь на третью или четвертую вкладку и поворачиваю устройство, предыдущие вкладки убиваются и не воссоздаются снова, кроме первой вкладки. Первая вкладка всегда есть. Зачем? Я бы понял ошибку в коде, но активность вкладок копируется из учебника, а активность списка одинакова для всех вкладок. Вот некоторые журналы, которые я получаю:
List created with 1
onConfigurationChanged
List created with 1
List created with 2
List created with 4
List created with 5
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
List created with 4
onConfigurationChanged
List created with 1
List created with 4
onConfigurationChanged
List created with 1
List created with 4
List created with 5
onConfigurationChanged
List created with 1
List created with 5
onConfigurationChanged
List created with 1
List created with 5
Как вы можете видеть из журналов, каждый список операций регистрирует идентификатор положить в пакет статистов, и не делает довольно много ничего. Итак, приложение запускается и создается первая вкладка, затем я поворачиваюсь и переключаюсь на другие вкладки. Вызывается метод onCreate. А затем журнал показывает, как я переключаю вкладки и вращаюсь. В зависимости от того, какая вкладка видна, различные виды воссоздаются, но первая всегда есть!
Почему первая вкладка всегда воссоздана? По какой-то причине это особое поведение? Я вижу это на уровне API HTC Legend 7.
UPDATE: Я положил еще несколько журналов в петле в TabActivity в создании отдельных вкладок, и он выглядит, когда добавляется закладка первой его деятельность всегда создан. Есть ли способ избежать этого? Может быть, создать пустые пустые вкладки, а затем заполнить их реальными действиями? Еще несколько журналов:
onConfigurationChanged
Tab: Saving tab index 3
...
Tab: Adding tab 1
List created with 1
Tab: Adding tab 2
Tab: Adding tab 3
Tab: Adding tab 4
Tab: Adding tab 5
Tab: Setting tab to index 3
List created with 5
Я отдал предпочтение этому, потому что я хочу посмотреть, есть ли у кого-нибудь идеи о том, как избежать этого накладного дефицита. В дополнение к тому, что я заметил ниже, я рассматриваю возможность внедрения пустой, невидимой 1-й вкладки только для повышения производительности. –
Мне понравилась ваша идея о невидимой вкладке, поэтому я пошел и реализовал ее с фиктивной деятельностью. Ввод журналов в фиктивный вид активности показывает, что он все еще создается/уничтожается во время ориентации устройства, поэтому, по соображениям производительности, кажется целесообразным. Кроме того, если мой JSON сломан, активность Tab не падает из-за того, что он пуст, так как фиктивная вкладка всегда будет присутствовать. Спасибо за идею. –
Сумасшедшие обходные пути, которые нам приходится иногда придумывать, нет?;) –