Меня учили, что все переменные и обьекты нужно инициализировать в onCreate() , ну в смысле глобальные (как правило). Но уже несколько раз встречаю в коде опытных разработчиков когда например листы инициализируются прям там где обьявляются переменные private OnVideoSelectedListener mCallback private AdapterList mAdapterList = null private ArrayList> mTempVideoData = new ArrayList<>() private ArrayList> mVideoData = new ArrayList<>() private String mNextPageToken = "" private String mVideoIds = "" private String mDuration = "00:00" private boolean mIsStillLoading = true Не сколько это правильно и ничему ли это не мешает? Например быстродействию программы или еще что то?
Ответ Где правильно инициализировать обьекты? Согласно документации, к инициализации объектов есть только одно требование: Поля и переменные должны быть инициализированны до того как они будут использоваться. Так что ответ будет - в любом месте. Меня учили, что все переменные и обьекты нужно инициализировать в onCreate()... Я так понимаю что вопрос больше про андроид. OnCreate() - это метод который предназначен для инициализации Activity и он будет вызван как только вы запустите Activity с интентом. Это нормально и общепринято, инициализировать поля в onCreate методе. Я думаю что главная идея сделать инициализацию Activity в onCreate это сократить время старта приложения. Когда ваше приложение запускается, андроид создает экземпляры всех классов (не уверен на счет всех) и если что-то долгое выполняется в конструкторе, то это замедлит старт приложения. Это также относится к выделению памяти для полей класса. Хотя конечно, это мизерное время. Но стоит помннить, что если вы попытаетесь использовать Activity как Activity activity = new Activity() activity.someMethod().... тогда, onCreate() метод вызыван не будет. В общем, касательно вопроса где инициализировать, наиболее распростороненны два способа: - там где переменная объявлена - в конструкторе оба правильные, я предпочитаю констркторы. В любом случае старайтесь следовать одному стилю. Для полноты ответа отмечу, что вы также можете инициализировать поля в инициализационном блоке class A { private String myField { myField = "..." } }