Java+Android для школьников. Занятие №17. Разбор первой программы для Android

Давайте с помощью сегодняшнего занятия попробуем осознать, насколько это возможно, из каких частей состоит наш первый проект для Android, созданный IDE Android Studio (Студией) и что же все-таки написано в Java-коде файла MainActivity.java, который был упомянут в конце Занятия 16.

Для этого будет вполне достаточно основных понятий о файловой системе компьютера, и, для понимания кода, который создала Студия автоматически, знаний, полученных на наших занятиях по изучению языка Java.

Для начала не поленимся и посмотрим, где на жестком диске лежат файлы нашего проекта, вспомним о пункте Project Location.

Перейдем с помощью файлового менеджера в каталог проекта (в моем случае это /home/si/my_android_projects/FirstApp, так как я работаю в операционной системе Linux Mint):

Как видно, в этом каталоге много файлов и папок в названии которых фигурирует уже известный нам gradle. Пока давайте не будем их трогать.

Проследим лучше, что находится в папке app/src/main, забегая вперед, скажу что именно здесь находятся основные "кирпичики" нашего проекта:

Первый файл, на котором мы заострим внимание - AndroidManifest.xml, его еще называют "манифест" андроид-приложения. В нем описываются основные моменты взаимодействия приложения с операционной системой. Разработчику редко, но приходится редактировать этот файл, причем, как правило, напрямую, с помощью текстового редактора.

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

Вообще, нужно заметить, что при освоении различных технических дисциплин (и в информационных технологиях в том числе) существует правило: если что-то не понятно при первом прочтении материала, не стоит принимать это как то, что не будет понятно никогда. При дальнейших прочтениях, а главное при попытке что-то сделать самостоятельно, становится понятным тот или иной аспект сложной, на первый взгляд, технической задачи или технологии.

Следующая по "непонятности" папка res, наполненная каталогами с очень похожими на AndroidManifest.xml файлами. (Об xml-технологиях и применении их в Android см. статью "Программирование на Андроид это просто")

И последняя папка которую мы будем исследовать - java. Откроем последовательно каталоги, вложенные в эту папку - java/ru/learn2prog/firstapp. В ней лежит единственный (пока) файл MainActivity.java:

В принципе можно открыть его и просмотреть файловым редактором, но мы поступим иначе, открыв его Студией, для этого запустите связанный с ней ярлык (см. Java + Android. Занятие №16 1 часть) и, если вы не открывали других проектов, увидите знакомое по Занятию 16 окно:

Если же нужный нам файл MainActivity.java не открыт в окне редактора (напомним, что редактор кода занимает бОльшую часть окна Студии), перейдите в уже знакомый нам Project View. И выберите последовательно пункты app->java->ru.learn2prog.firstapp(здесь должно быть имя вашего пакета + имя вашего проекта)->MainActivity.java

Теперь, наконец, сосредоточимся на исходном коде основного файла нашего приложения - MainActivity.java. Редактор, кстати, любезно пронумеровал для нас строки кода.

Для тех, кто привык разбираться досконально, в первой строке - описан пакет нашего приложения. Имя пакета, если помните, выбирается при создании приложения.

В строках 3-5 находится импорт, который мы пока оставим без внимания.

В строках 6-13 описан главный и пока единственный класс этого пакета - MainActivity с методом onCreate(). Согласно строке 6 класс MainActivity наследует от класса Activity. Для тех кто забыл о наследовании в Java и ключевом слове extends, ссылка.

Теперь я хочу показать один из моих любимых трюков в Студии. Установите курсор на наименовании класса Activity в редакторе и нажмите сочетание клавиш Ctrl+Q, чтобы познакомиться с "родителем" нашего класса MainActivity

Вызов документации (или справки), а именно это происходит при нажатии на Ctrl+Q, помогает правильно применить ту или иную конструкцию языка, в нашей ситуации он поможет нам разобраться в нашей несложной, на первый взгляд, программе.

Итак, если перевести справку о классе Activity, получится примерно следующее:

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View). ... There are two methods almost all subclasses of Activity will implement:
  • onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource defining your UI, and using findViewById(int) to retrieve the widgets in that UI that you need to interact with programmatically.
  • onPause() ...
Activity (Активность) - это единственная возможность взаимодействия с пользователем. Практически все активити взаимодействуют с пользователем, поэтому класс Activity заботится о создании окна для вас, в котором вы можете разместить свой пользовательский интерфейс с помощью setContentView(View). ... Существует два метода, которые реализуют практически все подклассы (классы, наследующие от) Activity:
  • onCreate (Bundle) - это то, где вы инициализируете свою активити. Самое главное, здесь вы обычно вызываете setContentView(int) с ресурсом макета, определяющим ваш пользовательский интерфейс, и используя findViewById(int) для извлечения виджета (элемента пользовательского интерфейса) в этом пользовательском интерфейсе, с который вам необходимо взаимодействовать через программное обеспечение.
  • onPause() ... оставим "на потОм"

Итак, вырисовывается следующая зависимость: в суперклассе (родительском классе) нашего класса MainActivity определено место его разработчиками - метод onCreate(), в котором нужно не забыть вызвать метод setContentView(), указав макет, который определит внешний вид окна с его элементами. На этапе создания проекта мы указывали вид шаблона, на основании которого Студия создала для нас интерфейс нашего приложения.

Для человека первый раз столкнувшегося с созданием графического приложения термин "интерфейс пользователя" (графический интерфейс пользователя, GUI - Grafical User Interface) может ввести в заблуждение. Действительно технический термин интерфейс мы в этом курсе уже использовали дважды - объясняя как осуществляется взаимодействие с объектами Java (интерфейс объекта) и рассказывая о конструкции языка Java interface.

Теперь мы употребляем этот термин в третий раз. Элементы интерфейса пользователя (забегая вперед, скажем, что это могут быть кнопки, поля ввода, картинки, метки), как говорится в справке, называются виджетами (widgets).

В общем-то теперь становится понятным суть кода класса MainActivity - мы унаследовали от класса, описывающего окно (Activity), реализовали метод onCreate(), в котором указали где лежит разметка нашего окна с помощью setContentView() и все... наше приложение заработало, для Android этого оказалось достаточным!

Однако, мы не увидели в исходном коде MainActivity метода main. Ничего удивительного! Как говорилось ранее, Android особенная операционная система и для нее оказалось оптимальным переместить точку входа в программу в другое место.

На следующем занятии - углубимся в setContentView(), виджеты и попытаемся немного "оживить" нашу программу!


Дополнительно почитать об Активити (ВНИМАНИЕ! Перевод не "безгрешен" - там где встречаем "операция", как правило нужно читать "активити"):
https://developer.android.com/guide/components/activities?hl=ru