Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Создание программного обеспечения для нательных компьютерных сетей и носимых систем. Учебное пособие.pdf
X
- •ЧАСТНОЕ УЧРЕЖДЕНИЕ
- •Медицинский университет «РЕАВИЗ»
- •ВВЕДЕНИЕ
- •1.2. Исторический обзор развития носимых систем
- •ГЛАВА 2. ТЕХНОЛОГИЧЕСКИЕ АСПЕКТЫ РАЗРАБОТКИ
- •2.1. Выбор технологического стека для носимых систем
- •2.2. Архитектурные решения при разработке программного обеспечения
- •2.3. Управление энергопотреблением и оптимизация производительности
- •2.5. Интеграция с облачными сервисами в носимых приложениях
- •2.4. Работа с датчиками и взаимодействие с окружающей средой
- •2.6. Аспекты безопасности в технологическом контексте
- •3.1. Языки программирования и их роль в разработке для носимых систем
- •3.2. Принципы объектно-ориентированного программирования в контексте носимых технологий
- •3.3. Обзор паттернов проектирования для эффективной разработки приложений
- •3.4. Многозадачность и управление потоками в носимых приложениях
- •3.5. Оптимизация алгоритмов под ограниченные ресурсы носимых устройств
- •3.6. Работа с сенсорами и вводом данных в носимых приложениях
- •3.7. Адаптация пользовательского интерфейса к маленьким экранам и управлению сенсорами
- •4.1. Особенности дизайна интерфейса для различных типов носимых устройств (часы, очки, фитнес-трекеры)
- •4.2. Адаптация пользовательского опыта к ограниченным размерам экрана
- •4.3. Взаимодействие с пользователем через жесты и голосовые команды
- •4.4. Работа с уведомлениями и многозадачность в носимых приложениях
- •4.5. Применение принципов доступности в дизайне интерфейса
- •ГЛАВА 5. РАЗРАБОТКА КЛИЕНТ-СЕРВИСНОЙ ОРГАНИЗАЦИИ НАТЕЛЬНОЙ КОМПЬЮТЕРНОЙ СЕТИ (НА ПРИМЕРЕ watchOS)
- •5.3. Работа с данными и обеспечение их конфиденциальности
- •5.4. Разработка клиентских приложений
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •ПРИЛОЖЕНИЕ В

Wear OS: часто используются Java и Kotlin. Kotlin становится более популярным выбором, обеспечивая современный синтаксис и удобство разработки.
watchOS: основной язык – Swift. Swift обеспечивает высокую производительность и удобство в разработке, становясь предпочтительным выбором для
приложений под устройства Apple.
Tizen: поддерживает различные языки, включая HTML5, JavaScript и CSS.
Это позволяет разработчикам использовать веб-технологии для создания приложений.
Выбор языка зависит от опыта разработчика, требований к проекту и целевой платформы. Успешная адаптация языка программирования обеспечивает
эффективность и производительность приложения.
Носимые системы обладают ограниченным пространством экрана, поэтому важен выбор удобных методов ввода и отображения информации.
Wear OS: Использует стандартные компоненты Android для создания
удобного интерфейса. Жесты, виртуальная клавиатура и голосовые команды
обеспечивают разнообразные методы взаимодействия.
watchOS: Сфокусирован на использовании жестов и вращающейся короны для управления интерфейсом. Это позволяет обеспечить удобство использования даже на небольших экранах [41].
Tizen: Имеет гибкий подход к созданию интерфейсов, позволяя использовать различные технологии, включая веб-технологии, для построения пользовательского опыта.
Выбор методов взаимодействия зависит от конкретных особенностей
устройства и предпочтений пользователей.
Эффективный интерфейс обеспечивает удобство использования и привлекательный пользовательский опыт.
Интеграция с облачными сервисами становится все более важной для
синхронизации данных и обеспечения удобного управления устройством.
Все они предоставляют API для работы с облачными сервисами. Разработчики могут использовать их для хранения данных, синхронизации и резервного копирования.
Успешная интеграция с облачными сервисами обеспечивает доступность
данных на разных устройствах и обеспечивает удобство использования для
пользователя.
Выбор технологического стека должен быть осознанным и ориентированным на конкретные требования проекта, особенности устройства и потреб-
21

ности пользователей. Успешная адаптация технологического стека обеспечивает эффективное развитие программного обеспечения для носимых систем [45].
Давайте рассмотрим примеры разработки API-контроллеров для платформ Wear OS (Android), watchOS (iOS), и Tizen (Samsung).
Описание:
WearableActivity – это базовый класс для активностей Wear OS, предоставляющий функциональность, специфичную для носимых устройств.
onCreate – метод жизненного цикла, вызывается при создании активности. Здесь происходит установка макета (layout) и инициализация элементов
интерфейса.
mTextView – пример использования элемента интерфейса (TextView), который может быть использован для отображения данных на экране.
Комментарии в коде указывают, что в этом месте можно добавить логику
для взаимодействия с API Wear OS, например, для получения данных с сенсоров, отображения уведомлений и т.д.
// Пример API-контроллера на языке программирования Java с использованием фреймворка Android для Wear OS
import android.content.Context;
import android.support.wearable.activity.WearableActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends WearableActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text);
22

Описание:
WKInterfaceController – базовый класс для интерфейс-контроллеров в
watchOS.
WCSessionDelegate – протокол делегата для работы с WatchConnectivity,
который обеспечивает взаимодействие между приложением на Apple Watch и
связанным приложением на iPhone.
awake(withContext:) – метод вызывается при загрузке контроллера в память. Здесь настраивается WatchConnectivity для обмена данными между часами и iPhone.
Рис. 2.3. Пример использования элемента интерфейса (WKInterfaceLabel)
для отображения текста на экране часов в WearOS
Wear OS
}
}
Пример API-контроллера для watchOS (iOS):
swift
// Пример API-контроллера на языке программирования Swift для
watchOS
import UIKit
import WatchConnectivity
class InterfaceController: WKInterfa ceController, WCSessionDelegate {
@IBOutlet weak var label: WKInterfaceLabel!
override func awake(withContext context: Any? ) {
super.awake(withContext: context)
// Настройка WatchConnectivity для взаимодействия с iOSприложением
23

if WCSession.default.isReachable {
// Отправка запросов или получение данных от iOS-приложения
}
}
// Дополнительные методы для работы с API
}
Пример API-контроллера для Tizen:
Описание:
tizen-common-web – библиотека, предоставляющая доступ к функциям
Tizen Web API для работы с носимыми устройствами.
mainPage – пример работы с элементами интерфейса на веб-странице
(HTML), где элемент с id 'main' может быть использован для отображения данных.
updateData(data) – пример метода, который обновляет интерфейс с новыми данными.
fetchData()– пример метода, который может содержать код для получения
данных с использованием Tizen Web API.
// Пример API-контроллера на языке программирования JavaScript для
Tizen
import { tizen } from 'tizen-common-web';
var mainPage = document.getElementById('main');
function updateData(data) {
// Обновление интерфейса с новыми данными
}
function fetchData() {
// Здесь можно добавить код для получения данных с использованием
Tizen Web API
}
Приведенные примеры показывают базовую структуру API-контроллеров
для каждой платформы.
24

import UIKit
import WatchConnectivity
class InterfaceController: WKInterfa ceController, WCSessionDelegate {
@IBOutlet weak var label: WKInterfaceLabel!
override func awake(withContext context: Any? ) {
super.awake(withContext: context)
// Пример: Отправка запроса на iOS-приложение для получения дан-
ных
if WCSession.default.isReachable {
let requestDat a = [«request»: «getHeartRateData»]
WCSession.default.sendMessage(requestData, replyHandler: { response in
if let heartRateData = response[«heartRateData»] as? Double {
self.label.setText(«Пульс: \(heartRateData)»)
}
}, errorHandler: { error in
// Обработка ошибки
})
}
}
// Дополнительные методы для работы с API
}
Описание:
WCSession – класс, предоставляющий WatchConnectivity для взаимодей-
ствия между Apple Watch и iPhone.
isReachable – свойство, указывающее, доступен ли iPhone для обмена
данными.
В awake(withContext:) происходит отправка запроса на iOS-приложение
для получения данных (в данном случае, данных о пульсе).
В случае успешного ответа, данные обновляют интерфейс часов.
25

2.3. Управление энергопотреблением и оптимизация производительности
В контексте носимых систем, эффективное управление энергопотреблением и оптимизация производительности являются ключевыми аспектами для
обеспечения длительного времени автономной работы и удовлетворительного
пользовательского опыта.
Носимые устройства, такие как смарт-часы, смарт-браслеты и другие гаджеты, обладают ограниченными ресурсами батареи. Поэтому разработчики
программного обеспечения должны активно управлять энергопотреблением,
чтобы продлить время автономной работы устройства.
Этот процесс включает в себя оптимизацию работы приложений в фоновом режиме, эффективное использование сенсоров, а также активное участие в
режимах энергосбережения, предоставляемых платформой [3].
В связи с ограниченными вычислительными ресурсами нательных
устройств, оптимизация производительности приложений становится критически важной. Разработчики должны стремиться к минимизации использования
процессора, памяти и других ресурсов, чтобы предотвратить избыточное расходование энергии и обеспечить отзывчивость системы. Одним из подходов к
оптимизации производительности является асинхронная обработка задач, позволяющая устройству эффективно использовать свои ресурсы и переходить в
режим ожидания при неактивности.
Сенсоры, такие как акселерометры, гироскопы и датчики сердечного
ритма, являются ключевыми компонентами для сбора данных в носимых
устройствах. Однако их активное использование может значительно повысить
энергопотребление. Разработчики должны рационально управлять активацией и
деактивацией сенсоров в зависимости от необходимости сбора данных. Это
может включать в себя установку разумных интервалов снятия показаний, использование низкопотребляющих режимов работы сенсоров и их выключение
при неактивности [5].
Беспроводное сетевое взаимодействие, такое как Bluetooth или Wi-Fi,
также влияет на энергопотребление нательных устройств. Разработчики должны использовать эффективные протоколы передачи данных, минимизировать
объем передаваемой информации, а также управлять временем активации сетевых модулей. Оптимизация сетевого взаимодействия особенно важна в случае
синхронизации данных с облачными сервисами или мобильными устройствами.
Работа в режиме сна является эффективным средством для уменьшения
энергопотребления нательных устройств. Разработчики должны активно ис-
26

пользовать возможности платформы для перевода устройства в режим сна в тех
случаях, когда оно не активно. Это включает в себя приостановку работы неактивных приложений, отключение подсветки экрана и уменьшение частоты работы процессора.
Использование энергосберегающих API и инструментов
Многие платформы предоставляют специальные API и инструменты для
эффективного управления энергопотреблением [14].
Разработчики должны внимательно изучать документацию и использовать эти средства, такие как режимы энергосбережения, управление задачами в
фоновом режиме и механизмы ограничения доступа к ресурсам устройства.
Связь и сетевое взаимодействие играют важную роль в функционировании носимых систем, обеспечивая передачу данных, синхронизацию с облачными сервисами и взаимодействие с другими устройствами. В контексте носимых устройств, таких как смарт-часы, смарт-браслеты и носимые гаджеты, эти
аспекты требуют особого внимания разработчиков [19].
Использование асинхронных механизмов передачи данных является эффективным способом управления сетевыми операциями в носимых системах.
Асинхронные запросы и ответы позволяют устройству эффективно использовать ресурсы, не блокируя интерфейс пользователя и не увеличивая энергопотребление.
С учетом ограниченных ресурсов носимых устройств, разработчики
должны стремиться к эффективному использованию сетевых ресурсов. Минимизация объема передаваемых данных, оптимизация запросов к серверам и эффективное управление соединениями способствуют снижению энергопотребления и повышению производительности.
Примеры кода, написанные на языке программирования Java для управления энергопотреблением и оптимизации производительности в носимых системах (например, для Android Wear), могут включать следующие аспекты.
Пример: Оптимизация использования сенсоров и энергосберегающих режимов
java
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
27

import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
public class SensorManagerExample {
private SensorManager sensorManager;
private Sensor accelerometer;
private PowerManager powerManager;
private WakeLock wakeLock;
public SensorManagerExample(Context context ) {
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, «MyWakelockTag»);
}
public void startSensors() {
sensorManager.registerListener(sensorListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
wakeLock.acquire();
}
public void stopSensors() {
sensorManager.unregisterListener(sensorListener);
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
private SensorEventListener sensorListener = new SensorEventListener() {
@Override
28

public void onSensorChanged(SensorEvent event) {
sorManager.registerListener(sensorListener, accelerometer,
// Обработка данных с сенсоров
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Обработка изменения точности сенсора
}
};
}
В этом примере использованы энергосберегающий режим
PARTIAL_WAKE_LOCK и регистрация сенсоров с минимальной частотой
SENSOR_DELAY_NORMAL для оптимального использования ресурсов.
В данном примере использованы два важных аспекта для управления
энергопотреблением в носимых системах на базе Android Wear: частичный блокировщик (PARTIAL_WAKE_LOCK) и оптимизированная регистрация сенсоров.
Частичный блокировщик (PARTIAL_WAKE_LOCK):
PowerManager.PARTIAL_WAKE_LOCK представляет собой режим частичного блокирования, который позволяет устройству сохранять активность
части своих компонентов, даже когда экран выключен.
PowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
«MyWakelockTag») создает новый частичный блокировщик с тегом
«MyWakelockTag».
wakeLock.acquire() используется для активации частичного блокировщика, что предотвращает переход устройства в режим сна.
Оптимизированная регистрация сенсоров:
sen
SensorManager.SENSOR_DELAY_NORMAL) регистрирует слушателя сенсора
(в данном случае, акселерометра) с частотой опроса
SENSOR_DELAY_NORMAL.
SENSOR_DELAY_NORMAL указывает на нормальную частоту опроса,
что обеспечивает баланс между точностью данных и минимальным энергопотреблением.
При использовании минимальной частоты опроса, устройство активирует
сенсор только тогда, когда это необходимо, минимизируя потребление энергии.
29

Эти меры позволяют приложению эффективно работать с сенсорами,
только когда это необходимо, и при этом сохранять активность части компонентов устройства даже в режиме ожидания. Такой подход важен для носимых
устройств, где продолжительность автономной работы и эффективное использование энергии имеют большое значение [41].
Пример: Оптимизация сетевого взаимодействия и использование асинхронных запросов
java
import android.os.AsyncTask;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class NetworkExample {
// Метод для выполнения сетевого запроса
public void performNetworkRequest() {
// Запуск AsyncTask для выполнения запроса в фоновом режиме
new NetworkTask().execute(«https://example.com/api/data»);
}
// AsyncTask для выполнения сетевого запроса в фоновом режиме
private static class NetworkTask extends AsyncTask<String, Void, Void> {
// Метод, выполняющийся в фоновом потоке
@Override
protected Void doInBackground(String... urls) {
try {
// Создание объекта URL для указанного адреса
URL url = new URL(urls[0]);
// Открытие соединения
HttpURLConnection urlConnection = (HttpURLConnection)
url.openConnection();
// Настройка соединения и выполнение запроса
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
