Дипломная (вкр): Создание мобильного приложения для организации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

StartServicesReceiver подписан на событие "android.intent.action.BOOT_COMPLETED" которое вызывается при завершении загрузки операционной системы. Этот класс восстанавливает уничтоженные после перезагрузки устройства задания для запуска сервисов синхронизации.обрабатывает событие запланированного запуска сервиса UpdateOrdersService

UploadPhotosAlarmReceiver обрабатывает событие запланированного запуска сервиса UploadPhotosService

.2.4 Поставщик контента

Поставщик контента управляет общим набором данных приложения, которые можно хранить в файловой системе, в базе данных SQLite, в Интернете или в любом другом постоянном хранилище, доступ к которому может получить приложение. Через поставщика контента другие приложения могут запрашивать или изменять данные, если это разрешает поставщик контента. Например, система Android предоставляет поставщика контента, который управляет контактной информацией пользователя. Любое приложение, получившее соответствующие разрешения, может запросить часть этого поставщика контента для чтения и записи данных. Для системы поставщик контента является точкой входа в приложение для публикации именованных элементов данных, определенных схемой URI. Таким образом, приложение может решить, как он хочет сопоставить данные, которые он содержит, с пространством имен URI, передавая эти URI другим объектам, которые, в свою очередь, могут использовать их для доступа к данным. Есть несколько особенностей, которые позволяют системе выполнять управление приложением через поставщиков контента:

регистрация URI не требует, чтобы приложение оставалось запущенным, поэтому URI могут сохраняться завершения работы приложения. Операционная система может запустить приложение, когда появится соответствующий запрос на данные по привязанному к приложению URI;

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

Поставщики контента реализуются как подкласс базового класса ContentProvider и должны содержать стандартный набор API.

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

Когда система запускает компонент, он запускает процесс для содержащего его приложения, если оно еще не запущено. Например, если приложение запускает активность в приложении камеры, эта активность выполняется в процессе, который принадлежит приложению камеры, а не в процессе первого приложения.

Поскольку система запускает каждое приложение в отдельном процессе с ограничением доступа к другим приложениям, то одно приложение не может напрямую вызвать компонент из другого приложения. Этим занимается сама операционная система. Чтобы вызвать компонент другого приложения, необходимо сообщить операционной системе о намерении (Intent) запустить конкретный компонент, после чего операционная система сама вызовет необходимый компонент.

.2.5 Вызов компонентов

Три из четырех типов компонентов - активности, службы и широковещательные приемники - вызываются асинхронными сообщениями, называемыми намерениями (Intents). Намерения связывают отдельные компоненты друг с другом во время выполнения.

Намерение создается с помощью объекта Intent, который содержит сообщение для активации либо конкретного компонента (явного намерения), либо определенного типа компонента (неявный намерение).

Для активностей и сервисов намерение определяет действие для выполнения (например, для просмотра или отправки чего-либо) и может указывать URI данных для которых вызывается действие. Например, с помощью намерения можно передать запрос для открытия активности показывающей изображение или web-страницу.

Для получателей широковещательных сообщений намерение просто передает широковещательное сообщение.

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

Существуют также другие методы вызова каждого типа компонента:

активность можно вызвать с помощью методов startActivity() или startActivityForResult() (когда активность должна возвращать результат);

начиная с Android версии 5 можно использовать класс JobScheduler для отложенного запуска действий;

можно послать широковещательное сообщения используя методы sendBroadcast(), sendOrderedBroadcast() или sendStickyBroadcast();

можно послать запрос поставщику контента с помощью метода query() класса ContentResolver.

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

.2.6 Файл манифеста

Прежде чем система Android сможет запустить компонент приложения, система должна знать, что этот компонент существует. Приложение должно регистрировать свои компоненты в собственном файле AndroidManifest.xml. Платформа Xamarin может генерировать записи в этом файле основываясь на атрибутах классов, так, например, активности разработанного приложения зарегистрированы с помощью атрибута Activity а получатели широковещательных сообщений с помощью атрибута BroadcastReceiver и IntentFilter.

Кроме компонентов приложения файл манифеста содержит список разрешений необходимых приложению, например, для доступа в интернет или чтения контактов пользователя. Также в этом файле объявляется минимальная версия операционной системы для с которой будет работать данное приложение, сторонние библиотеки с которыми связано приложение и требования к функциональным возможностям мобильного устройства [3].

Активности, сервисы и поставщики контента, которые содержатся в мобильном приложении, но не объявлены в файле манифеста, не видны операционной системе и, следовательно, не могут быть вызваны. Однако получатели широковещательных сообщений кроме объявления в файле манифеста также могут быть зарегистрированы во время выполнения приложения с помощью вызова метода registerReceiver().

2.2.7 Объявление требований приложения

Существует множество устройств, под управлением операционной системы Android, и все они могут обладать разными техническими возможностями. Для того чтобы ограничить возможность установки приложения на устройства, которые не обладают достаточным функционалом для нормальной работы мобильного приложения, важно четко определить список устройств, поддерживаемых приложением, объявив необходимые требования к устройствам и установленному на них программному обеспечению в файле манифеста. Большинство из этих записей носят информационный характер, и система их не читает, но внешние службы, такие как Google Play, читают их, чтобы обеспечить фильтрацию пользователей при поиске приложений для своего устройства.

Например, если приложению требуется камера и оно использует API, представленные в Android 5, то это необходимо объявить в файле манифеста. При этом устройства под управлением операционной системы Android ниже версии 5 или те устройства, у которых отсутствует камера, не смогут установить данной приложение из Google Play. Однако можно также объявить, что ваше приложение использует камеру, но не требует ее, в этом случае приложение во время выполнения должно проверить, есть ли у устройства, на котором оно запущенно камера, и в случае ее отсутствия отключить все функции, в которых она используется.

.2.8 Ресурсы приложений

Приложение Android состоит не только из кода, но и ресурсов, которые отделены от исходного кода, таких как изображения, аудиофайлы и все, что связано с визуальным представлением приложения. Например, необходимо определять анимацию, меню, стили, цвета и макет пользовательских интерфейсов операций в файлах XML. Используя ресурсы приложения, можно без труда изменять его различные характеристики, не меняя код, а, кроме того, путем предоставления наборов альтернативных ресурсов можно оптимизировать свое приложение для работы с различными конфигурациями устройств (например, для различных языков или размеров экрана).

Для каждого ресурса, включаемого в проект Android, инструменты SDK задают уникальный целочисленный идентификатор, который может использоваться, чтобы сослаться на ресурс из кода приложения или из других ресурсов, определенных в XML. Например, если в приложении имеется файл изображения с именем logo.png (сохраненный в папке res/drawable/), инструменты SDK сформируют идентификатор ресурса под именем R.drawable.logo, с помощью которого на изображение можно будет ссылаться и вставлять его в пользовательский интерфейс [6].

Один из наиболее важных аспектов предоставления ресурсов отдельно от исходного кода заключается в возможности использовать альтернативные ресурсы для различных конфигураций устройств. Например, определив строки пользовательского интерфейса в XML, можно перевести их на другие языки и сохранить эти переводы в отдельных файлах. Затем по квалификатору языка, добавленному к имени каталога ресурса (например, res/values-ru/ для строк на русском языке), и выбранному пользователем языку система Android применит к пользовательскому интерфейсу строки на соответствующем языке.поддерживает разные квалификаторы для соответствующих ресурсов. Квалификатор представляет собой короткую строку, которая включается в имена каталогов ресурсов с целью определения конфигурации устройства, для которой эти ресурсы следует использовать. В качестве другого примера можно сказать, что для активностей следует создавать разные макеты, которые будут соответствовать размеру и ориентации экрана устройства. Например, когда экран устройства имеет книжную ориентацию (расположен вертикально), кнопки в макете можно также размещать по вертикали, а когда экран развернут горизонтально (альбомная ориентация), кнопки следует размещать по горизонтали. Чтобы при изменении ориентации экрана изменялся макет, можно определить два разных макета и применить соответствующий квалификатор к имени каталога каждого макета. После этого система будет автоматически применять соответствующий макет в зависимости от ориентации устройства [3].

Макет экрана входа в приложение выполнен в дух вариантах: для портретной ориентации экрана и для альбомной. Для этого соответствующие файлы помещены в папки ресурсов с названиями layout-land и layout-port.

.3 Жизненный цикл приложения

Активность - необычная концепция программирования, характерная для Android. В традиционной разработке приложений обычно используется статический метод main, который запускается при старте приложения. Однако в Android все иначе. Приложения Android могут запускаться через любую зарегистрированную активность в приложении. На практике большинство приложений будут иметь только одну активность, указанную в качестве точки входа приложения. Однако, если приложение аварийно завершилось или было завершено операционной системой принудительно, то операционная система может попытаться перезапустить приложение запустив последнюю используемую активность. Кроме того, операционная система может приостанавливать активность, если пользователь с ней непосредственно не взаимодействует, и восстанавливать их при необходимости. Многое необходимо принимать во внимание для того, чтобы приложение могло правильно восстановить свое состояние в случае перезапуска активности, особенно если эта активность зависит от данных активностей, запущенных перед ней.

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

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

Жизненный цикл активности Android включает набор методов, определенных в базовом классе Activity, которые предоставляют структурированный подход к управлению ресурсами.

Операционная система Android управляет активностями основываясь на их текущем состоянии. Это помогает операционной системе определять активности, которые больше не используются, что позволяет ей освобождать память и ресурсы. Диаграмма, показанная на рисунке 2.1 иллюстрирует состояния, в которых активность может находиться в течение своего жизненного цикла.

Рисунок 2.1 - Состояния активности

Эти состояния можно разбить на четыре основные группы следующим образом:

выполняется или работает. Активности считаются выполняющимися, если они находятся на переднем плане, то есть на вершине стека активностей. Это состояние обладает наивысшим приоритетом в операционной системе Android и, как такая активность может быть завершена операционной системой только в экстремальных ситуациях, например, если активность пытается использовать больше памяти, чем доступно на устройстве, так как это может привести к тому, что пользовательский интерфейс перестанет отвечать на запросы пользователя;

приостановлена. Когда мобильное устройство переходит в режим сна или активность все еще видна, но частично скрыта новой, не полной или прозрачной активностью, активность считается приостановленной. Приостановленные активности все еще живы, то есть они сохраняют всю информацию о состоянии и дочерних элементах и остаются прикрепленными к оконному менеджеру. Это состояние является вторым по приоритету в Android. Активности находящиеся в этом состоянии могут быть завершены операционной системой только если это необходимо для поддержания выполняющейся активности в рабочем состоянии;

в фоне/остановлена. Активности, полностью перекрытые другими активностям, считаются остановленными или находящимися в фоновом режиме. Остановленные активности по-прежнему пытаются сохранить информацию о своем состоянии и состоянии дочерних элементов как можно дольше, но при этом они обладают наименьшим приоритетом и могут быть убиты операционной системой в любое время для поддержания работоспособности активностей с более высоким приоритетом;

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

Источник: https://www.bibliofond.ru/detail.aspx?id=897268