Как кэшировать просмотры с помощью Android и не вызывать onCreate каждый раз - PullRequest
6 голосов
/ 27 апреля 2009

У меня вопрос, который меня раздражает.

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

Вызов onCreate каждый раз, кажется, повторно анализирует XML для создания представлений и повторного присоединения / повторного создания слушателей к коду и так далее. Так есть ли способ кэшировать активность, которую нужно каждый раз вызывать, не видя ее, если мы нажмем кнопку «Назад» на мобильном устройстве? Это как если бы он был действительно скрыт (недоступен с помощью кнопки «назад») и уничтожен, только если это необходимо.

Спасибо всем заранее:)

Ответы [ 3 ]

6 голосов
/ 03 мая 2009

Android будет обрабатывать наиболее применимые виды и кэширование активности, и вам не нужно об этом беспокоиться. Я настоятельно предупреждаю против подхода Алеккипара. Это довольно наивно и только ухудшит производительность, а также создаст утечки памяти и выправит неправильное поведение.

Если вы чувствуете, что Activity создаются слишком часто, я бы порекомендовал убедиться, что вы используете и правильно понимаете жизненный цикл Activity. Как и в любой системе, Android балансирует между эффективностью и возможностью повторного использования, и всегда есть компромиссы.

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

1 голос
/ 27 апреля 2009

Если он вызван, это означает, что ваш процесс завершился или был убит системой.

onCreate будет вызываться каждый раз, когда начинается ваша деятельность. Именно так работает жизненный цикл Activity , и там вы мало что можете сделать.

Если вы хотите, чтобы ваш процесс оставался в памяти, вам следует подумать о том, чтобы реализовать его как Сервис .

0 голосов
/ 05 мая 2009

Вы не можете запретить вызов onCreate при каждом создании Activity, потому что так все и работает.

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

Если вы ищете скорость и отзывчивость, ответом может быть ViewFlipper . Вы определяете уникальное действие, а когда используете свою функцию, вы просто меняете представление. Все ваше приложение загружается в самом начале, а затем остается в памяти, пока Dalvik не понадобится. Вы можете найти довольно сложный пример в коде приложения с открытым исходным кодом astrid .

...