Почему onCreate () в Activity защищен? - PullRequest
10 голосов
/ 13 апреля 2011

Почему onCreate () в Activity защищен?

или мне следует спросить: почему он работает?

Защищенный метод можно вызывать только внутри самого класса или онпотомки.Таким образом, система Android не может называть это как «act.onCreate ()».Итак ... как это можно назвать?

Кстати, почему onClick () в OnClickListener является публичным?Какая разница?

Ответы [ 4 ]

7 голосов
/ 20 февраля 2014

функция onCeate () защищена, чтобы не вызывать ее из объекта действия.

MyActivity activity = new MyActivity();
activity.onCreate(args);  // which doesn't make sense because activity is not yet created

Поскольку этот метод вызывается только при создании действия, вызывайте его самостоятельноскорее всего, даст вам nullpointerException , потому что действие еще не создано.

7 голосов
/ 13 апреля 2011

Полезно иметь общедоступные методы onClick, потому что вы можете «принудительно» нажимать определенные кнопки программным способом.Типичным примером этого является выполнение того же кода для выполнения, когда пользователь нажимает клавишу ввода или нажимает кнопку «Отправить».

Я не думаю, что Android вызывает Activity.onCreate напрямую.Обратите внимание, что Activity наследует от Context (который имеет открытый конструктор ).Насколько я понимаю, конструктор запускает некоторые события, и методы onCreate / Pause / Resume / Destroy вызываются внутри класса в соответствующее время.

Например, когда вы создаете действие, XML-файл представления должен анализироваться и раздуваться.Это происходит автоматически, так что за кулисами происходит нечто, что вы не контролируете напрямую.

2 голосов
/ 27 сентября 2014

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

Если я создаю класс Activity в пакете com.abccompany.activity, а один из моих коллег создает класс синтаксического анализа данных JSON в пакете com.abccompany.jsonparser, я не хочу, чтобы он создавалмоя деятельность и отображение его данных JSON, когда он хочет.

onCreate не является частным, поскольку вы хотите создать подкласс Activity, а затем использовать метод super Activity onCreate для подкласса.

Фактически каждое проектирование, которое вы разрабатываете, расширяет android.app.Activity, поэтому, если onCreate был закрытым для этого суперкласса, вы вообще не сможете вызывать onCreate.

0 голосов
/ 13 апреля 2011

Почему вы должны заботиться о том, защищен ли onCreate?Защищен, потому что по логике к нему не должен обращаться другой класс, отличный от Activity.Как Android запускает Активность?Есть много способов сделать это, особенно если вы тот, кто спроектировал фреймворк, решение может состоять в том, что он вызывается в конструкторе (это возможно) с помощью других механизмов, таких как отражение с соответствующими привилегиями и т. Д.

OnClick является общедоступным, поскольку он может быть установлен или обработан внешними классами, которые не являются обязательными для вашей деятельности.Под этим я подразумеваю, что класс A может обрабатывать событие onClick для Activity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...