Android - конструктор действий против onCreate - PullRequest
81 голосов
/ 21 июля 2010

Я понимаю, что у Android Activities есть определенные жизненные циклы и что onCreate следует переопределить и использовать для инициализации, но что именно происходит в конструкторе? Были ли случаи, когда вы могли / должны также переопределить конструктор Activity, или вы никогда не должны его трогать?

Я предполагаю, что конструктор никогда не должен использоваться, потому что ссылки на Activities не очищаются полностью (что препятствует сборщику мусора) и что onDestroy существует для этой цели. Это правильно?

Ответы [ 4 ]

32 голосов
/ 22 июля 2010

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

7 голосов
/ 20 июля 2013

Хорошая причина для размещения вещей в конструкторе, как было сказано в комментарии Гили, - это использование полей final.

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

Хотя это противоречит моему идеалу, я избегаю конструктора для инициализации членов действия и полагаюсь на onResume() и onPause() для ресурсов, с которыми имеет дело мое приложение.

Для onCreate() Обычно я использую его для отображения отображения на локальные переменные.Хотя android-аннотации уже делают это для меня, поэтому у меня редко есть метод onCreate() для моей Деятельности.Я все еще использую его в Службе.

Однако, если вы посмотрите на участников, вы можете инициализировать

  • , у них будет «закрытый» метод, который вам придетсявызывать в нужное время (onResume или onPause)

  • они будут частью представления, что означает, что его нужно инициализировать, тогда нужно вызвать onCreate

  • это константы, которые в любом случае не нужно помещать в конструктор, просто статический финал подойдет.Это включает константы Paint и Path, которые могут быть инициализированы статическим блоком

6 голосов
/ 14 января 2012

Сейчас я нахожусь в случае, когда необходимо переопределить конструктор.На самом деле, у меня есть некоторые виды деятельности, которые имеют одинаковую структуру.Таким образом, вместо того, чтобы создавать много видов деятельности, я создам один «Мастер», а остальные наследуют этот.Поэтому мне нужно переопределить конструктор дочернего действия, чтобы иметь возможность инициализировать некоторые переменные, которые будут использоваться в методах oncreate.

В двух словах, конструктор заставляет вас моделировать «мастерство», которое можно использовать повторнопо наследству!

0 голосов
/ 21 июля 2010

Вам необходимо переопределить конструктор, если в вашей активности будут настраиваемые параметры или вы хотите отслеживать вызовы из классов, унаследованных от.

...