Глава 2. Android Приложение

Оглавление

Глава 2. Android Приложение

Задачи

Манифест Приложения

Глава 2. Android Приложение

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

An App in the Android OS
Рис 2-1. Схема Android приложения

Компоненты приложения, запускаемые исполняемой средой Android(Android Runtime) – запускаются либо через наступающие события, на которые запрограммированно Ваше приложение, либо программно через  код в приложении. Триггер, при выполнении условий которого запускается компонент программы зависит от указанных Вами метаданных в описании компонента. Удалением или остановкой работы компонентов занимаетесь как Вы сами, так и ОС Android, которая может решить что Ваша свернутая программа или работающий сервис занимают слишком много ресурсов.

Чтобы разрабатываемое Вами приложение работало максимально стабильно, а пользователи были довольны стабильной работой и качественным UI, Вам пригодятся знания о жизненном цикле Android компонентов. В этой главе мы рассмотрим характеристики системных компонентов и их жизненный цикл.

Написать приложение или Android компонент – довольно тривиальная задача. Вы можете почитать руководство на официальном сайте Android, создать каркас приложения из шаблонов Android Studio, или скачать с гитхаба примеры наших приложений из книги и на этом каркасе строить уже Вашу разработку, или даже посмотреть видео туториалы на Youtube и по видео руководству создать приложение. Однако это простое приложение не обязательно будет стабильным профессиональным приложением, так как разработка Java или Kotlin приложений для настольных систем в корне отличается от мобильной разработки. Одна из причин, это то, что например операционная система Android может завершить ваше фоновое приложение для сохранения заряда или системных ресурсов, чего не случается в настольных системах, вроде MacOS или Windows.

Конечно, Android система не будет закрывать Ваше активное приложение, находящееся на переднем фоне, в случае если у вас конечно не возникнет ошибка времени исполнения. Но Вы должны предусмотреть вероятность того, что Ваше приложение будет перезапущено и оно желательно должно отображать все данные, введенные пользователем до этого.

С точки зрения файловой системы, файл Android приложения APK – это архивный zip файл с расширением *.apk. Этот архив содержит Ваше приложение, включая все мета данные для запуска Вашей программы. Самый главный файл в APK – это файл AndroidManifest.xml, описывающий приложение и все компоненты, содержащиеся в нем.

Мы не будем здесь подробно описывать структуру APK архива, так как в этом нет необходимости – Android Studio в большинстве случаев позаботится о корректном создании APK или Bundle файла, и Вам нет необходимости разбираться в этом вопросе. Однако Вы всегда можете сами изучить получившийся *.apk файл и даже попробовать его декомпилировать.

Пример содержания APK файла Вы можете посмотреть на рисунке 2-2.

Example of APK file
Рисунок 2-2. Пример APK файла приложения

Файлы *.dex содержат скомпилированные классы в формате Dalvik Executable(исполняемый файл формата Dalvik) – очень похоже на Jar файл в Java. По ходу повествования мы будем еще разбирать темы байт кода, исполняемой среды Android и т.д. А пока перейдем к следующей теме – Задачи.

Задачи

Задача – это группа активностей, взаимодействующих с друг с другом таким образом, что пользователь рассматривает их как единое приложение. Пользователь запускает Ваше приложение, видит главную активность, выполняет какие то действие, переключается на другие активности, переключается между приложениями и возвращается обратно в среду, закрывая Ваше приложение.

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

Внутри тега <application> файла Androidmanifest.xml, мы увидим несколько настроек, которые изменяют стандартное поведение стека задач(см. глава 3). Таким образом, правильно спроектированный стек задач поможет Вашим пользователем свободно и интуитивно использовать приложение. Но и не стоит перегружать архитектуру множеством окон, чтобы пользователи не запутались в том, как именно работает Android приложение. Поэтому необходимо постараться найти баланс между мощностью возможностей и простотой использования.


Заметка. Больше информации по стеку активностей Вы можете прочитать по адресу https://developer.android.com/guide/components/activities/tasks-and-back-stack.html


Манифест Приложения

Самым важным файлом конфигурации Android приложения считается файл AndroidManifest.xml. Он описывает приложения и объявляет все используемые компоненты приложения. Схема типового приложения файла AndroidManifest.xml выглядит следующим образом:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"          
          xmlns:tools="http://schemas.android.com/tools"          
          package="de.pspaeth.tinqly">
    ...    
      <application
            android:allowBackup="true"        
            android:icon="@mipmap/my_icon"        
            android:label="@string/app_name"        
            android:roundIcon="@mipmap/my_round_icon"        
            android:supportsRtl="true"        
            android:theme="@style/AppTheme">
        <activity ... />
    </application>
</manifest>

Самый важный атрибут корневого тега manifestpackage. Он объявляет уникальный идентификатор имени пакета. И если вы планируете разместить свое приложение в маркетах, Вам необходимо выбрать уникальный идентификатор, чтобы у Вас не было конфликта имен с уже существующим приложением. Идеальным решением будет использование имени домена Вашей компании и потом добавить название приложения.

Все доступные теги <manifest> приведены в таблице 2-1. Обратите внимание, что для большинства простых приложений, Вам нужно определить только имя пакета и добавить один элемент <application>

 

Наименование Описание
android:installlocation Определяет место установки приложения. Используйте “internalOnly” для установки только во внутреннюю память, “auto” – по умолчанию устанавливается во внутреннюю память, но позже в настройках пользователь может перенести приложение во внешнюю память, и “preferExternal” – если хотите разрешить ОС принять решение об установке на внешнее хранилище. Если Вы не выбрали ни один пункт, то по умолчанию стоит internalOnly. Современные устройства поставляются с большими объемом внутреннего хранилища и Вам не нужно указывать куда необходимо устанавливать Ваше приложение.
package Уникальный идентификатор Вашего приложения. Строка вида “abc.def.ghi.[…]” где в качестве символом могут быть символы из латинского алфавита [A-Z] и [a-z], числа и символ подчеркивания _ Цифры могут идти только после символов алфавита, но не до. Имя пакета также является именем процесса в ОС Android и имя задач по умолчанию. Обратите внимание, что после публикации Вашего приложения в маркете, Вы уже не сможете изменить имя пакета. Для этого атрибута нет значения по умолчанию
android:sharedUserid Признан устаревшим начиная с API 29. Имя ID пользователя ОС Android, назначенного приложению.
android:sharedUserlabel Устарело начиная с API 29. Если Вы назначили sharedUserid, Вы можете установить удобочитаемую метку для ID пользователя.
android:targetSandboxVersion Уровень песочницы для вашего приложения. Может принимать значение 1 или 2. Чем выше значение, тем выше уровень безопасности. При установке второго уровня, параметр сетевой безопасности usesCleartextTraffic автоматически становится равным false. Совместное использование UID становится запрещен. Для Instant Apps(приложения с мгновенным запуском) необходимо установить уровень 2.
android:versionCode Внутренний номер версии приложения. Необходим для управления выпусками Ваших приложений в консоли разработчика. Версии должны увеличиваться, т.е. сначала идет 1, 2, потом 3 и т.д. По умолчанию не определено
android:versionName Версия приложения, отображаемая пользователю. Используется только для информирования пользователя. Может использоваться как текстовая константа, так и строковый ресурс.
Таблица 2-1. Главные Атрибуты Манифеста приложения

Полная документация доступная по адресу https://developer.android.com/guide/topics/manifest/manifest-element. Мы перечислили наиболее важные и те, с которыми Вы будете работать по мере разработки приложений

 

Leave a Reply

Please disable your adblocker or whitelist this site!