открытая статическая переменная или использование метода putExtra класса intent

У меня есть общий вопрос о производительности, и какой из них я должен делать, а какой не должен использовать. На самом деле я использую в своем приложении два вида деятельности, назовем их "theFirst" и "theSecond".

в первом действии у меня есть публичный статический объект, в моем случае это список пользовательского объекта, сделанного мной, называемый Conjunction.

когда я вызываю thesecond activity, я хочу получить содержимое этого списка. Итак, должен ли я использовать общедоступную статическую переменную ? есть есть проблемы? Будет только один случай первой активности, верно? Поэтому нет проблем с использованием public static variable..? Я думаю.

или я должен вычислить весь список и поместить информацию в большую строку и отправить ее в theSecond activity с помощью метода putExtra?

хорошее объяснение на этом было бы очень хорошо, и я был бы очень признателен :)

2 ответов


использование статических переменных не рекомендуется. Статические переменные хранятся в PermGen кучи. Даже если класс завершает работу, статические переменные остаются в куче. Сборщик мусора помечает и подметает. Если у вас есть статические переменные в 1-м действии, на которое ссылаются во 2-м действии, ссылка остается длинной. Вы можете получить утечки памяти, если используете больше статических переменных. Также уменьшите использование ненужных объектов.

статический переменные ссылаются на объекты класса, на которые ссылаются загрузчики классов ,поэтому, если только загрузчик классов каким-либо образом не отбрасывает класс или сам загрузчик классов не получает права на сборку мусора, статические переменные не будут собраны в мусор. Поэтому, если вы используете статические переменные, на которые ссылаются во многих классах, эти классы и тот, в котором объявлены статические переменные, не могут быть собраны в мусор, если эти классы не доступны для сбора мусора. Таким образом, это приводит к памяти кучи расширение приводит к утечкам памяти.

Я рекомендую использовать puExtra для типов примитивов. В вашем случае использование singleton должно помочь.

в этом видео парень говорит о том, почему статические переменные не должны использоваться и как избежать утечек памяти.http://www.youtube.com/watch?v=_CruQY55HOk. Парень говорит об использовании Mat Analyzer для проверки утечек памяти.

Также посмотрите на эту ссылку. http://developer.android.com/guide/faq/framework.html.Посмотрите на детали под заголовком *Как передать данные между действиями / службами в одном приложении?.


public static-не очень хорошая идея. "первая" деятельность может быть прекращена системой в некоторых случаях. Получить через: Жизненный Цикл Активности может помочь вам, как работает.

лучше использовать putExtra не совсем как строку, но также посмотреть на putExtra для Parselable или Serializable объекта. смотрите здесь для сериализации