Android - Activity Constructor vs onCreate

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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

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