2016-03-10 1 views
0

я в основном спрашивают о разнице между этими двумя подходами:объект член экземпляра в OnCreate против при декларировании

public class myClass extends AppCompatActivity { 
    private objectType mObject = new objectType(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     //do stuff with mObject 

и

public class myClass extends AppCompatActivity { 
    private objectType mObject; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mObject = new ObjectType(); 

Я надеюсь, что я веду себя достаточно ясно. Я изо всех сил пытаюсь понять, когда мы хотим выбрать один против другого.

+0

, если 'objectType' не имеет * контекста * связанного ограничения, нет большой разницы – Blackbelt

+0

@Blackbelt Я новичок во всем этом, поэтому вам, возможно, придется ошеломить его, но что вы имеете в виду связанное с контекстом ограничение? – DoubleBass

+0

'' objectType' полагается на объект типа 'Context'? – Blackbelt

ответ

2

Функционально, ничего.

Первый будет создан при создании объекта Activity (new myClass()). Система Android делает это в определенный момент во время создания.

Второй будет создан, когда система в конечном итоге вызовет onCreate().

Если бы у вас был объект, которому нужен конструктор Context. Вы можете сделать это, например:

public class myClass extends AppCompatActivity { 
    private objectType object = new objectType(this); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     //do stuff with object 

И приложение будет внезапно аварии, потому что вы, скорее всего, будет пытаться извлечь ресурсы из Context, которые еще не существуют. (Помните, что активность не создается на этом этапе).

Итак, если ваш объект действительно должен использовать Context, вам необходимо создать его после или после вызова onCreate.

+0

Так что 'onCreate' технически является исполнителем своей деятельности? Если нет, что делает конструктор действий? Вы говорите, что 'this' требует, чтобы конструктор был вызван первым? – DoubleBass

+0

Я не уверен, поможет ли это так думать. Больше похоже на обратный вызов, чем на конструктор. У Activity есть конструктор (все классы). Однако все действия * должны иметь конструктор по умолчанию или приложение взорвется (это требование для этого класса. Не требование для всех классов). Система создает экземпляр Activity. Он его строит. Предоставляет ресурсы, которые ему нужны.Затем, когда это делается, он вызывает «onCreate()» в Activity, чтобы сообщить вам (разработчику), что все готово и хорошо идти. Это когда вы делаете дальнейшую настройку, которая является обычным для этой активности. – DeeV

+0

Я полагаю, что я спрашиваю, есть ли какой-то конструктор, называемый 'myClass()', который вызывается за кадром перед вызовом 'onCreate()', и если да, то что он на самом деле делает? – DoubleBass

1

Деятельность имеет четко определенный жизненный цикл, как вы, вероятно, знаете. Это не всегда имеет значение, если вы создаете новые экземпляры в конструкторе против OnCreate, но вы определенно предпочитают OnCreate в этих обстоятельствах:

  1. Если новый объект необходим правильный контекст, то есть не доступна до OnCreate() , Вы не можете сделать это в конструкторе.
  2. Если вы хотите активно освободить ресурс, как только он вам больше не понадобится, onDestroy предоставляет хороший аналог toCreate в отношении жизненного цикла деятельности. Это может помочь вернуть объекты быстрее, чем если бы они были созданы в конструкторе и сохранены как «окончательные». Хотя это не является абсолютно необходимым, это дает читателю понять, что вы хотите выполнять работу после жизненного цикла Activity, а не только с самим экземпляром объекта.
+0

Я знаком с основами жизненного цикла (создание, пауза, остановка, уничтожение и т. Д.), Но я не совсем понимаю, как все это играет на бэкэнде точно. Когда вы говорите: «Вы не можете сделать это в конструкторе», что вы имеете в виду точно (раздел объявления переменных члена класса)? Что касается вашего второго момента, вы подразумеваете, что может быть лучше создать экземпляр внутри 'onCreate()'? – DoubleBass

+0

Если вы создаете объект, для которого требуется действительный контекст (Activity is a Context), вы рискуете столкнуться с проблемами, если этот конструктор объектов пытается использовать переданную вами Activity, как если бы это был допустимый контекст. Первой возможностью, которую вы должны использовать экземпляр Activity в качестве надлежащего контекста, является onCreate. Если вам вообще не нужен контекст для создания нового объекта, это может вообще не иметь значения. –

+0

Правильно, но то, что я прошу, - это когда экземпляр Activity впервые становится пригодным для использования (через «это») – DoubleBass

Смежные вопросы