Ответ 1
Я не могу придумать какой-либо веской причины сделать что-либо в конструкторе. Вы никогда не создаете действие напрямую, поэтому вы не можете использовать его для передачи параметров. Как правило, делайте что-то в onCreate.
Я понимаю, что Android Activities
имеет конкретные жизненные циклы и что onCreate
следует переопределить и использовать для инициализации, но что именно происходит в конструкторе? Есть ли случаи, когда вы могли/должны переопределять конструктор Activity
, а также не должны ли вы его трогать?
Я предполагаю, что конструктор никогда не должен использоваться, потому что ссылки на Activities
не очищаются полностью (таким образом, препятствуя сборщику мусора) и что для этой цели onDestroy
. Правильно ли это?
Я не могу придумать какой-либо веской причины сделать что-либо в конструкторе. Вы никогда не создаете действие напрямую, поэтому вы не можете использовать его для передачи параметров. Как правило, делайте что-то в onCreate.
Теперь я пришел к случаю, который должен переопределить конструктор. Фактически, у меня есть некоторые виды деятельности, которые имеют одинаковую структуру. Поэтому вместо создания многих действий я создам одно действие "Мастер", а остальные наследуют это. Поэтому мне нужно переопределить конструктор дочерней активности, чтобы иметь возможность инициализировать некоторые переменные, которые будут использоваться в методах oncreate.
В двух словах конструктор позволяет моделировать "мастерактивность", которая может быть повторно использована наследованием!
Хорошей причиной для размещения вещей в конструкторе, как сказал комментарий Гили, является использование конечных полей.
Однако, если вы инициализируете вещи в конструкторе, срок жизни объекта будет немного длиннее, хотя я не думаю, что многое, потому что onCreate
будет вызвано вскоре после этого.
Хотя он против моего идеала, я избегаю конструктора для инициализации членов активности и полагаюсь на onResume()
и onPause()
для ресурсов, с которыми работает мое приложение.
Для onCreate()
я обычно использую его для сопоставления отображения локальным переменным. Хотя андроиды андроида уже делают это для меня, поэтому у меня редко есть метод onCreate()
для моей активности. Я все еще использую его в сервисе.
Однако, если вы посмотрите на элементы, которые вы можете инициализировать
у них был бы "близкий" метод, который вы должны вызвать в нужное время (onResume или onPause)
они будут частью представления, что означает, что он должен быть инициализирован, тогда onCreate нужно называть
они - константы, которые в любом случае не нужно вставлять в конструктор, только статический финал. Это включает константы Paint и Path, которые могут быть инициализированы статическим блоком
Вам нужно переопределить конструктор, когда ваша активность будет иметь настраиваемые параметры или вы хотите отслеживать вызовы из классов, унаследованных от.