Андроид, что это такое — для чайников

Контекст (Context) – это базовый абстрактный класс, реализация которого обеспечивается системой Android. Этот класс имеет методы для доступа к специфичным для конкретного приложения ресурсам и классам и служит для выполнения операций на уровне приложения, таких, как запуск активностей, отправка широковещательных сообщений, получение намерений и прочее. От класса Context наследуются такие крупные и важные классы, как Application, Activity и Service, поэтому все его методы доступны из этих классов.

Методы получения контекста и их различие

Получить контекст внутри кода можно одним из следующих методов:

  • getBaseContext (получить ссылку на базовый контекст)
  • getApplicationContext (получить ссылку на объект приложения)
  • getContext (внутри активности или сервиса получить ссылку на этот объект)
  • this (то же, что и getContext)
  • MainActivity.this (внутри вложенного класса или метода получить ссылку на объект MainActivity)
  • getActivity (внутри фрагмента получить ссылку на объект родительской активности)

Все эти способы дадут нам возможность получить ссылку на объект, содержащий методы класса Context.

Как было сказано выше, контекст является базовым классом для классов Application, Activity и Service, а значит его методы входят в их состав. Именно поэтому для передачи контекста в качестве параметра можно использовать как ссылку на сам контекст (getBaseContext), так и ссылки на наследуемые классы (getApplicationContext, getContext, this, MainActivity.this, getActivity).

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

Например, если вызвать сообщение с помощью Toast, используя разные context, то:

Сообщение умрёт вместе с активностью:Toast.makeText(this, «Text», Toast.LENGTH_SHORT).show();Сообщение умрёт вместе с приложением:Toast.makeText(getApplicationContext(), «Text «, Toast.LENGTH_SHORT).show();Будет видно даже после завершения приложения:Toast.makeText(getBaseContext(), «Text «, Toast.LENGTH_SHORT).show();

То есть, мы видим, что хотя контекст одинаков у разных объектов, сами эти объекты могут жить разное время.

Контекст можно представить, как набор функций для работы на уровне приложения, вошедший в состав таких крупных классов, как Application, разных видов Activity, Service.

Контекст (Context) – это базовый абстрактный класс, реализация которого обеспечивается системой Android. Этот класс имеет методы для доступа к специфичным для конкретного приложения ресурсам и классам и служит для выполнения операций на уровне приложения, таких, как запуск активностей, отправка широковещательных сообщений, получение намерений и прочее. От класса Context наследуются такие крупные и важные классы, как Application, Activity и Service, поэтому все его методы доступны из этих классов. Источник

Методы получения контекста и их различие

Получить контекст внутри кода можно одним из следующих методов:

  • getBaseContext (получить ссылку на базовый контекст)
  • getApplicationContext (получить ссылку на объект приложения)
  • и(внутри активности или сервиса получить ссылку на этот объект)
  • this (то же, что и getContext)
  • MainActivity.this (внутри вложенного класса или метода получить ссылку на объект MainActivity)
  • getActivity (внутри фрагмента получить ссылку на объект родительской активности)

Все эти способы дадут нам возможность получить ссылку на объект, содержащий методы класса Context.

Как было сказано выше, контекст является базовым классом для классов Application, Activity и Service, а значит его методы входят в их состав. Именно поэтому для передачи контекста в качестве параметра можно использовать как ссылку на сам контекст (getBaseContext), так и ссылки на наследуемые классы (getApplicationContext, getContext, this, MainActivity.this, getActivity).

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

Например, если вызвать сообщение с помощью Toast, используя разные context, то:

Сообщение умрёт вместе с активностью:

Toast.makeText(this, «Text», Toast.LENGTH_SHORT).show();

Сообщение умрёт вместе с приложением:Toast.makeText(getApplicationContext(), «Text «, Toast.LENGTH_SHORT).show();

Будет видно даже после завершения приложения:Toast.makeText(getBaseContext(), «Text «, Toast.LENGTH_SHORT).show();

То есть, мы видим, что хотя контекст одинаков у разных объектов, сами эти объекты могут жить разное время.

Контекст можно представить, как набор функций для работы на уровне приложения, вошедший в состав таких крупных классов, как Application, разных видов Activity, Service.

Содержание
  1. С чего начать?
  2. Создание первого Android проекта
  3. Структура Android проекта: Команда
  4. Java: Профессионал
  5. Resources: Артист
  6. AndroidManifest.xml: Босс
  7. Причины использования VPN
  8. Как пользоваться VPN на компьютере?
  9. Как пользоваться VPN на мобильных устройствах?
  10. Интернет и приложения
  11. PlayMarket и стандартные приложения
  12. Видео-инструкция
  13. Из концепта в жизнь. Первые планшеты.
  14. Для чего нужен планшет? Его преимущество перед прочими гаджетами.
  15. Как выбрать планшет? Какой купить?
  16. Совет первый
  17. Совет второй
  18. Совет третий
  19. Как пользоваться планшетом?
  20. Бонус для начинающих «яблочников»
  21. Шаг 6. Приложение для Андроид-устройств
  22. Dependency Injection
  23. Что, зачем и когда это нужно
  24. Создание классов порождает…
  25. Возможность создавать объекты…
  26. И… зависимости 
  27. Dagger and JSR-330 Standart
  28. Аннотация @Inject
  29. Немного еще НЕ истории 
  30. Инверсия управления (англ. Inversion of Control, IoC)
  31. Reflection vs Compile time
  32. JSR-330
  33. JSR-330 a.k.a. javax.inject
  34. Итак, пришло время добавить в наш код немного магии…
  35. Обратите внимание на конструктор по умолчанию
  36. Конструктор с параметрами — хорошее место для модификаций
  37. И все же — как это заставить работать?
  38. Home readings
  39. Гибриды против натуралов
  40. Гибриды

С чего начать?

Каким образом проходит процесс разработки под Android? Выделим несколько основ:

  • В Java файлах вы описываете логику программы — то, что вы хотите, чтобы ваше приложение выполняло.
  • В XML файлах вы разрабатываете макеты — внешний вид.
  • Как только приложение будет написано, нужно использовать инструмент сборки для того, чтобы скомпилировать все файлы и упаковать их вместе в .apk файл, который можно запускать на устройствах Android и/или опубликовать в Google Play.
  • Все утилиты и файлы, которые используются для создания приложения под Android, объединены в интегрированную среду разработки (IDE). IDE — это программа, которую вы откроете для редактирования ваших файлов кода, а также компиляции и запуска.
  • Ранее стандартной IDE для разработки под Android была Eclipse, но сейчас ее заменила более функциональная Android Studio — продукт компании Google.

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

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

  • Загрузим и установим Android Studio.
  • Узнаем про запуск и тестирование приложений на устройствах и эмуляторах Android.
  • Создадим простое приложение на Android, которое выводит надпись «Hello World» на экран мобильного устройства.

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

Создание первого Android проекта

Пришло время создать первый проект. Начнем с простого. У программистов принято называть первую программу «Hello World». Давайте следовать этой традиции, а затем сделаем несколько небольших изменений, чтобы приложение использовало ваше имя для приветствия. В конце вы сможете загрузить его  на устройство и показать своим знакомым. Android Studio имеет небольшой пошаговый инструмент, который поможет вам создать свой проект. Нажмите «New Project» на стартовом экране:

Далее вы должны увидеть окно, подобное следующему:

Заполните его подобным образом. Не стесняйтесь заменить «example» в имени пакета на что-то еще, чтобы удалить предупреждение внизу экрана. Вы также можете установить местоположение проекта, указав любую папку на жестком диске

Для раскрывающихся версий SDK обратите внимание на раздел «Описание» в нижней части диалогового окна. В нем объясняется, для чего предназначена каждая настройка.

Установите минимальный требуемый SDK, как показано на снимке экрана. Это устанавливает минимальную версию Android, необходимую для запуска приложения. Выбор этого значения для ваших собственных проектов — это вопрос балансировки возможностей SDK, которые вы хотите, и устройств, которые будут поддерживаться.

Для первого приложения я рекомендую использовать версию API 14, которая является Android 4.0 Ice Cream Sandwich. Каждое приложение будет иметь разные требования, и вы можете выбрать что-то другое, в зависимости от ситуации.

Для получения дополнительной информации о версиях API и их использовании, на сайте для разработчиков под Android существует специальная страничка Dashboards https://developer.android.com/about/dashboards/index.html.

После выбора версии, открывается экран выбора стартового шаблона. Вы можете создать приложение, которое уже взаимодействует с api google maps и отображает карту. В нашем тестовом примере выбираем Empty Activity и нажимаем кнопку «Next».

И сейчас вы находитесь на последнем шаге процесса создания приложения. Прежде чем нажать «Finish», обратите внимание на некоторые вещи. Тут вы впервые сталкиваетесь с упоминаниями о главных архитектурных компонентах любого приложения.

  • Activity Name — это первое, но не последнее упоминание слова Activity. В контексте Android, Activity обычно рассматривается как «экран» в вашем приложении. Этот элемент очень гибкий. Когда Android Studio создает класс MainActivity, он наследует его от класса Activity из пакета Android SDK. Те, кто знаком с объектно-ориентированным программированием, понимают эту концепцию, но для новичков, это, в основном, означает, что ваша MainActivity будет настраиваемой версией Activity.
  • Layout Name — макет того, что будет показано пользователю, определен в специальном виде Android XML. Вы скоро научитесь читать и редактировать эти файлы.

Нажимаем Finish. Некоторое время займет создание и загрузка проекта. Через некоторое время Android Studio завершит билд вашего проекта. Конечно, проект пока пуст, но в нем есть все необходимое для запуска на Android-устройстве или эмуляторе.

После загрузки проекта вы просматриваете файл макета в формате XML. Прежде чем перейти к программированию под Android, давайте поговорим о том, каким образом мы можем запустить это приложение. Пришло время сказать «Hello world!».

Структура Android проекта: Команда

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

Java: Профессионал

Это часть вашего кода, которая отвечает за логику приложения. Ваш код будет находиться в каталоге src\main\java в основной папке проекта. Для изучения Java можно посоветовать книгу Брюса Эккеля «Философия Java»;

Resources: Артист

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

При инициализации, папка содержит следующие папки:

  • drawable, в которой хранятся иконки. Сейчас там лежит только стандартная иконка приложения.
  • layout с XML файлами, которые представляют собой дизайны экранов.
  • menu c XML файлами списков элементов, которые будут отображаться в панели действий.
  • values с XML файлами, содержащими размеры, цвета, строковые константы и стили.

AndroidManifest.xml: Босс

Этот XML-файл информирует вашу систему о требованиях к оборудованию и программному обеспечению приложения и содержит его версию имя и значок. Манифест также содержит информацию про все Activity в приложении. Вам нужна работа, выполняемая вашим приложением? Сначала поговорите с начальником.

Причины использования VPN

Пользоваться технологией VPN необходимо каждому пользователю, и вот почему:

  • Защита данных. Особенно подходит тем пользователям, кто любит подключиться к «халявному» соседскому Wi-Fi-соединению, а потом обнаружить, что данные о его карте были украдены. К таким ситуациям относятся и посиделки в кафе и вообще в любых точках с бесплатным Wi-Fi.
  • Полная анонимность. Когда вы открываете новую вкладку с сайтом – это действие будет отображаться на сервере провайдера, так что ваше путешествие по интернету может отследить любой сотрудник компании. Включив VPN, вы скроете историю своих просмотров или посещений, так как вы используете иной IP-адрес.
  • Возможность серфинга в интернете без препятствий. Букмекерские конторы, интернет-казино, торренты, форумы, сайты для взрослых – все «подполье» интернета вновь доступно для вас, все, как в былые времена.
  • Использование зарубежных ресурсов. Это, конечно, вряд ли, что вы будете использовать англоязычные сервисы, типа hulu.com, но все равно – полноценный доступ ко всем популярным сайтам всего мира вам обеспечен.

Как пользоваться VPN на компьютере?

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

  1. установить VPN-клиент (программу) на ПК;
  2. добавить расширение для браузера через Webstore.

Что первый, что второй вариант – они легко реализуются, но для полной картины рассмотрим и тот, и другой.

Так же можно использовать бесплатный, встроенный VPN в браузере Opera.

Чтобы установить VPN-клиент, необходимо скачать программу в интернете, например, «Betternet». Запускаем установочный файл и устанавливаем клиент. Запускаем его, нажимаем: «Connect» и все. Проблема в том, что программа автоматически выдает нам рандомный IP-адрес, и мы не можем выбрать страну, зато при нажатии всего одной кнопки мы уже используем VPN. И еще один минус – это необходимость постоянно запуска программы, впрочем, некоторые клиенты имеют возможность одновременного запуска с ОС.

Второй способ – это добавления расширения. Здесь минус в том, что, чаще всего, требуется регистрация для пользования, плюс, расширения имеют свойства «вылетать». Зато расширение использовать намного проще – кликаешь по иконке в браузере, выбираешь страну и profit. На данный момент существуют тысячи подобных программ, можете выбрать любую из них, например, «Hotspot Shield». Добавьте расширение в браузер, пройдите регистрацию и больше никаких технических моментов не будет.

Например, вот так работает расширение ZenMate VPN в браузере:

О VPN расширениях для разных браузеров мы писали в статье: VPN для Chrome, Opera, Firefox и Яндекс.Браузера.

Как пользоваться VPN на мобильных устройствах?

Мы рассмотрим те устройства, что имеют на борту популярные ОС, например, iOS или Андроид.

Использование VPN на смартфонах или планшетах тоже реализуется довольно просто, а именно – через мобильные приложения. Проблема в том, что некоторые программы требуют root-прав, а это дополнительные заморочки, плюс, возможность превращения телефона в «кирпич». Так что ищите те программы, которые не требуют от вас root-прав. На Android, например, это OpenVPN, а на iOS – это Cloak. Так же на iPhone и iPad можно использовать бесплатный и проверенный Opera VPN для iOS. Я сам им иногда пользуюсь, отлично работает.

Технология загрузки очень проста: скачиваем приложение из Play Market или AppStore, устанавливаем его на свой девайс. Далее, активируем VPN, выбираем профиль (откуда, получим IP-адрес), далее, проводится соединение и на этом все. Теперь вы гуляете по интернету через VPN, о чем вам и сообщит используемое приложение.

Теперь вы понимаете, как реализована технология VPN-соединений, и теперь ваше пребывание в сети станет более безопасным, анонимным, а главное – доступным и неограниченным.

Полезное и интересное

Интернет и приложения

Любой гаджет может подключиться к Wi-Fi сети и большинство могут использовать мобильные сети 3G/4G. К Wi-Fi подключаться нужно через соответствующий пункт в меню настроек (пальцем сдвиньте кружок вправо. Станет синим, и начнется поиск сети). Ткните в надпись «Wi-Fi» — откроется подпункт, где можно выбрать сеть и подключиться к ней.

PlayMarket и стандартные приложения

Подключив интернет, можно начать с ним работать. Во время работы с устройством, у вас постоянно будет возникать потребность в какой-то новой функции: редактор текстовых фалов, редактор .doc документов, файловый менеджер, учет доходов/расходов, почтовик и так далее. Эти программы являются сторонним ПО, то есть, не установлены по умолчанию. Их нужно искать на PlayMarket — сервисе от Google. Если вам понадобится любое приложение (например, переводчик текста) или игра, зайдите в PlayMarket и напишите поисковой запрос (например, «перевод текста») в соответствующее поле вверху экрана в главном меню PlayMarket. Жмите на поиск — получите кучу результатов. Выбирайте любой, тыкайте и скачивайте соответствующей кнопкой (большая зеленая).

Стандартные приложения обычно включают в себя:

  • Файловый менеджер — для редактирования и удаления файлов и папок
  • Браузер — «дефолтный», то есть, по умолчанию
  • Галерея — просмотр картинок, фото и видео
  • Музыка — работа с музыкой
  • Почта — организация почтовых аккаунтов
  • Календарь — стандартный календарь с напоминаниями

Видео-инструкция

Что еще почитать

  • Что делать если планшет не включается и не заряжаетсяЧто делать если планшет не включается и не заряжается
  • Как осуществить сброс Android устройства до заводских установокКак осуществить сброс Android устройства до заводских установок
  • Что делать если жутко тормозит планшет на AndroidЧто делать если жутко тормозит планшет на Android
  • Устанавливаем Viber на Android планшетУстанавливаем Viber на Android планшет
  • Способы настройки iCloud на компьютереСпособы настройки iCloud на компьютере
  • Подключаем к планшету на Андроид клавиатуры, мышь и USB флешкуПодключаем к планшету на Андроид клавиатуры, мышь и USB флешку

Из концепта в жизнь. Первые планшеты.

Теперь, когда мы имеем представление о том, что такое планшет, можем ознакомиться с историей развития и первыми планшетами в мире.

Изначально они, а точнее их прототипы, использовались разве что в фантастических фильмах и были лишь фантазиями, как сейчас, например, путешествие во времени, но в отличии от него фантазия о портативных компьютерах реализовалась, и уже в 1968 году Алан Кей представил устройство напоминающее планшет, именуемое «Dynabook». Он обладал встроенной в корпус клавиатурой и был создан исключительно для обучения.

Dynabook - первый планшет

Вот, кстати, и сам Алан Кей на презентации со своим детищем.

Алан Кей на презинтации

Затем начали появляться еще и карманные компьютеры, работающие на Windows XP, но обладающие слабым процессором и аккумулятором, которого хватало лишь на 2-3 часа работы устройства. Также выпускались и КПК, что расшифровывается как Карманный Персональный Компьютер. Для управления ими использовались стилусы (сенсорная ручка, на которую реагирует экран), прикосновения пальцем сей девайс не воспринимал.

Планшет на Windows XP

Одним из первых подобных был «MessagePad», представленный всемирно известной компанией Apple. Представлен он был 2 августа 1993-го в Бостоне. Данное устройство стоило очень дорого — 800 долларов, но несмотря на это первые 5000 экземпляров разлетелись в считанные часы, как горячие пирожки.

КПК от Apple

История планшетных компьютеров тянется уже довольно долго, но огромный скачок в их развитии произошел совсем недавно, в 2010 году, после выхода Ipad(Планшет от компании Apple). После этого все магазины просто кишат предложениями различных фирм.

Apple приносит в мир инновации, а остальные подхватывают их и создают собственную продукцию, но стоит ли тогда выбирать что-то другое кроме яблока? Пожалуй, да. Хотя бы по той причине, что не всем нужен такой дорогой и такой мощный планшет, ведь некоторые не будут использовать его потенциал даже наполовину. Именно потому, что не все так просто, мы с вами и здесь, так давайте разберемся со всеми аспектами выбора и использования планшетов.

Для чего нужен планшет? Его преимущество перед прочими гаджетами.

Начнем мы с самого, казалось бы, простого впороса — Для чего нужен планшет?

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

Ipad как разделочная доска

Это не рекомендуется, конечно.

Ipad в роли весов

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

  1. Облегчить себе работу, используя различный софт
  2. слушать музыку
  3. играть в игры
  4. Кот играет в планшет

  5. читать книги
  6. сидеть в интернете
  7. планировать свой день
  8. рисовать
  9. Человек рисует на планшете

  10. общаться
  11. фотографировать
  12. ориентироваться по карте

И это только самое основное. Тысячи приложений же многократно преувеличат этот список.

Теперь давайте рассмотрим преимущества планшета. Естественно, я упомяну и минусы, ведь минусы есть у всего. Это все лично мое мнение, как пользователя Ipad со стажем. Ну, и вдобавок скажу, что все плюсы могут стать и минусами у дешевых моделей, но ниже я опишу исключительно товар качественный.

  1. Огромный запас заряда аккумулятора, которого хватает с излишком. Поскольку с большим устройством места внутри больше, то и положить туда можно больше.
  2. Большой экран, с которым комфортно чтение и просмотр видео.
  3. Достаточно мощное «железо» (процессор, оперативная память…) и идеально оптимизированные приложение под него (как в случае с Apple, так это точно).
  4. Огромное количество платных и бесплатных приложений для любых целей.
  5. Простая, интуитивно понятная операционная система с приятным интерфейсом.
  6. Доступ ко всем вашим данным из любого места, а не только дома.
  7. Огромное количество удобных и функциональных чехлов, например, таких как Smart Cover.
  1. Большой размер. Планшеты, конечно, бывают разных размеров, но никто из них не может похвастаться умением лежать в кармане, а если и могут, то это уже и не планшет вовсе. Соответственно, придется брать сумку или носить его в руках.
  2. Нет доступа к мощному софту, как на ноутбуках.
  3. Если сравнивать со смартфонами, то невозможность звонить и писать смс. Но это компенсируется огромным количеством програм для общения, таких как Skype, Viber, WatsUp (хотя сейчас уже есть официальные версии Вибера для копьютера и онлайн версии Вацапа), VK и так далее.

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

Как выбрать планшет? Какой купить?

Ну, выбор естественно индивидуален и я не назову сейчас «лучший планшет». Потому, что лучший он для каждого свой, и звание «лучший» зависит от множества факторов.

Могу облегчить вам выбор лишь своими советами. Ну, и тогда напишу «нулевой» совет прямо тут: советую вам воспользоваться для выбора планшета или еще чего-либо сервисом Яндекс Маркет, про который я недавно написал статью. Сразу с одного сайта выбирать удобнее, там все фирмы и характеристики, вобщем, надеюсь, вы разберетесь, писать я старался подробно. Сам им пользовался при выборе, все наглядно разбросал на плюсы и минусы для себя.

Совет первый

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

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

Совет второй

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

Совет третий

Совет, в принципе, касаемо любой покупки, не покупайте планшет сразу там, где смотрите его, во всяких салонах, там цена очень сильно завышена. Найдите проверенный интернет-магазин и закажите там (с этим вам поможет вышеупомянутый Яндекс Маркет).

Разбитый Ipad

Не волнуйтесь, ваш планшет придет к вам в целости и сохранности. 🙂

Как пользоваться планшетом?

Допустим, вы морская свинка, только что купили планшет и не знаете с чего начать. Тогда вы по адресу.

Ipad в роли весов

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

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

Лично я переходил с Android на Ios абсолютно не изучая систему (про Android я тоже, кстати, ничего не читал, кроме как пару статей для решения конкретных проблем). Но это мой метод, лично мне нравится узнавать что-то новое о системе при работе с ней. Да и знать-то много не надо, в том и прелесть мобильных систем, они интуитивно понятны, просты и наглядны. Человек, впервые увидевший экран Ipad, уже сможет сориентироваться в нем и что-то, да сделать.

Конечно, перед тем как покупать что-то, надо быть хоть немного теоретически подготовленным к работе с ним, но не будем о скучном.

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

Ipad mini комплектация

Включите планшет, обычно кнопка включения сверху или сбоку на корпусе. Кнопку нужно удерживать. Также осмотрите корпус на предмет других механических кнопок, в инструкции узнайте об их функциях. Дождитесь пока таблетка (от слова «tablet», для разнообразия назову его так) включится. У Apple-девайсов после первого включения надо настроить планшет.

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

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

Затем, когда вы настроили подключение к интернету, постарайтесь найти на экране магазин приложений, чтобы пополнить свою коллекцию весьма нужного софта. У aplle этот магазин называется Apple Store, у Android — Play Market. Там придется зарегистрироваться. Затем установите самое важное для работы с девайсом — например браузер, приложения социальных сетей. Все зависит от вас.

Хм, ну, в общем-то и все, не так и сложно, как казалось, не правда ли? Да и если возникнут трудности, благо живем в 21 веке и интернет всегда под рукой, если вы не найдете ответ на вопрос сами, то можете задать его в комментариях тут или же на специализированных форумах.

Бонус для начинающих «яблочников»

Я люблю Apple

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

Первое, это оффициальный сайт Apple. Мне он очень нравится своим дизайном. А кому он не нравится? Сайт на уровне компании.

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

В общем, всю нужную информацию дает нам Apple (что не удивительно, они всегда делают акцент на мелочах, и настолько тщательно все «полируют», что и придраться к чему-то сложно). Так что и второе место нам тоже дает Apple (отбирает корм у бедных обзорщиков).

И если вы обладатель их устройства с Ios 8, то вам и ходить далеко не надо. Это изначально установленное приложение «советы».

Сделаю мини-обзор сего мини-приложения.

Чтобы открыть «Советы», найдите иконку лампочки на желтом фоне, как на скриншоте.

Иконка советов на рабочем столе

Вот так выглядят советы — все лаконично и понятно, с картинками. Чтобы прогрузились картинки — включите интернет, после этого они останутся в кэше (что такое кэш?) и можно будет смотреть советы без интернета.

Первый совет

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

Совет с разбором кнопок

Также можно поделиться советами, например, если ваш друг спрашивает у вас: «как отправить голосовое сообщение?». Вы можете послать ему соответствующий совет.

Поделиться советом

Не обязательно листать все советы в поисках нужного. Можно отрыть заголовки советов списком и быстро найти свой.

Все советы списком

Владельцы Android, уж простите, но я не так сильно разбираюсь в вашей системе, поделился тем, о чем имею представление. Кстати, есть новомодная штучка под названием Перископ, которую можно бесплатно скачать и для Андроида, и для IOS. Довольно прикольное приложение. Надеюсь это будет полезно.

Шаг 6. Приложение для Андроид-устройств

В этом уроке мы не будем касаться создания приложений для устройств на основе Андроида. Вы можете скачать приложение на GitHub.

Как использовать приложение?

После того как мы подключились через Bluetooth — нам нужно скачать и установить приложение, которое при помощи смартфона 🙂 будет управлять нашим светодиодом на расстоянии. Скачать приложение вы можете бесплатно на сайте Амазон.ком. Подсоединяем смартфон к модулю Bluetooth HC 05/06:

  1. Включите модуль HC 05/0
  2. Ищем устройство
  3. Соединяемся с HC 05/06 введя дефолтный пароль «1234» или «0000» (четыре нуля).

После этого мы устанавливаем приложение на наш смартфон. Открываем его. Выбираем устройство — выбираем модуль Bluetooth  из списка (HC 05/06). После успешного подключения нажмите кнопку ON для включения светодиода и кнопку OFF, чтобы выключить светодиод. Потом уже можно нажать кнопку «Отключить», чтобы отключиться от модуля Bluetooth.

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

  • Простое соединение Аrduino через bluetooth
  • Делаем управление светодиодом голосом с помощью Arduino
  • Управление Arduino с помощью оболочки Python

Dependency Injection

Что, зачем и когда это нужно

Сегодня мы поговорим об инструменте, который помогает улучшить качество разработки для Android. Решить эту задачу можно с помощью Dependency Injection (DI). Обычно этот термин ассоциируется с инъекциями, шприцами и немножко с «зависимостями». На самом деле, Dependency Injection — паттерн проектирования, обеспечивающий реализацию принципа инверсии зависимостей и реализующий правила создания объектов и независимость реализаций.

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

Таким образом, вы реализуете ОOП и можете создавать объекты.

Создание классов порождает…

  • Композиция — не наследование.
  • Ссылки не будут пустовать. 

Возможность создавать объекты…

Вы можете создать объект, задать имя машины и создать какой-нибудь новый двигатель.

Доступно создание разных объектов, например, создание двигателя другого типа или просто другого двигателя.

Предположим, вы можете создать два разных объекта, которые будете использовать. В данном случае, тот самый двигатель от «Патриота». Соответственно, если вы поставите этот двигатель в Jeep Grand Cheerokee — это будет немного странно. Но, тем не менее, вы можете это сделать. При этом используется так называемый паттерн «композиция », когда сущности, которые вы создаете, будут включаться в другую сущность, и это будет, как вы видите, не наследование, а именно композиция.

Здесь все очень просто: если вы посмотрите на SuperTunedEngine, поймете, что на самом деле он является наследником определенного типа, который уже объявлен заранее, а также, возможно, является реализацией интерфейса — для нас это непринципиально. В данном случае Engine может быть интерфейсом.

Глядя на два объявления, вы видите: мы можем сделать так, что два объекта будут зависеть от какого-либо другого объекта. Собственно, это и есть зависимость. Таким образом, возможность создавать объекты порождает зависимости — довольно банальная вещь.

И… зависимости 

Car depends on Engine. Engines may vary. We’ll probably need different engines for testing and production.

Как вы видите на схеме (изображение не из нашего примера), зависимости бывают очень разные. У вас будут зависимые сервисы, зависимые activity, презентеры, вью, контроллеры. Все эти сущности переплетены между собой зависимостями. Если попытаться выразить это графически, получится примерно то, что вы видите сейчас на картинке.

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

Dagger and JSR-330 Standart

Аннотация @Inject

Dagger основан на стандарте JSR-330. Этот стандарт Google использует очень давно, и это — стандарт для Java Injection.

Немного еще НЕ истории 

  • Dagger 2 — Google, Greg Kick
  • Dagger — Square, Jake Wharthon
  • Guice — Google, Jesse Wilson 

Заглянем немного в историю: Google когда-то создал такой продукт как Guice (в народе его называют «Джус», а в наших широтах — «Гусь»). Guice работал с рефлексией, он следовал аннотациям, но впоследствии разработчики из Square усовершенствовали систему, которая была в Guice и создали Dagger1. 

Dagger1 был крутым инструментом, но, как показывает практика, и тут можно что-то улучшить. Кстати, Dagger1 тоже использовал рефлексию. И в 2015 г. разработчики из Google выпустили Dagger2. Кажется, что еще совсем недавно Jake Wharton (известный разработчик из компании Square) анонсировал его выпуск с прицелом на осень — обещание выполнено, у нас есть качественный и опережающий конкурентов по результатам тестов продукт.

Инверсия управления (англ. Inversion of Control, IoC)

Вернемся к стандартам и терминологии. Итак, у нас есть продукт, который появился в ходе эволюции. Он использует JSR-330, который, предоставляет целый ряд аннотаций. Кроме того, он следует определенным принципам, своего рода паттернам разработки, один из которых — Inversion of control (IoC). 

Процесс предоставления внешней зависимости программному компоненту является специфичной формой «инверсии контроля» (англ. Inversion of control, IoC), когда она применяется к управлению зависимостями. В соответствии с принципом single responsibility объект отдаёт заботу о построении требуемых ему зависимостей внешнему, специально предназначенному для этого общему механизму.

Эта вещь связана с архитектурными паттернами. Мы должны писать приложение таким образом, чтобы внутренние классы, связанные с доменной логикой, не зависели от внешних классов, чтобы приложение было написано основываясь на интерфейсах. Таким образом реализуется разграничение зоны ответственности. Обращаясь к какой-то реализации, мы обращаемся, в первую очередь, к интерфейсу. Inversion of Control реализуется через Dependency Injection собственно сам инструментарий называется Dependency Injection (DI). 

Reflection vs Compile time

  • Dagger2 vs Dagger1

Dagger2 использует кодогенерацию, в отличие от Dagger1, который использовал рефлексию.

JSR-330

JSR-330 a.k.a. javax.inject

  • @Inject, @Qualifier, @Scope. etc.
  • Standardized Dependency Injection API
  • Reference Implementation: Google Guice 2.0
  • Also supported by Spring since 3.0
  • Defines API, not injector implementation or configuration

JSR описывает не только аннотацию @Inject, но и предоставляет целый пакет аннотаций, которые позволят вам декларировать каким образом будут взаимодействовать сущности для обеспечения Dependency Injection.

Например, я рассказываю об определенном семействе Dependency Injection-продуктов, которые следуют этому стандарту. Есть другие продукты, которые этому стандарту не следуют, о них мы сегодня говорить не будем, но они существуют. Есть @Inject, @Qualifier, @Scope — о них мы поговорим позже. Эти аннотации не были созданы только для Dagger2, они существуют и для других инжекторов, например, Guice.

Итак, пришло время добавить в наш код немного магии…

Мы начнем с того, что аннотируем члены класса аннотацией @inject. Все достаточно просто. Чтобы инстанцировать в дальнейшем эти зависимости и наш инструментарий Dependency Injection смог правильно подобрать куда именно инстанцировать и что, мы должны также аннотировать конструктор. Здесь ситуация становится немного интереснее.

Обратите внимание на конструктор по умолчанию

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

Конструктор с параметрами — хорошее место для модификаций

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

Также вы будете инжектировать презентеры с помощью таких конструкторов, это очень часто используется в MVP (Model-View-Presenter).

И все же — как это заставить работать?

Home readings

Sample code: http://github.com/c-mars/Dagger2Scopes.git

  • Fernando Cejas “Tasting Dagger 2 on Android”:http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/
  • Miroslav Stanek “Dagger 2 – graf creation performance/:http://frogerms.github.io/dagger-creation-performance/
  • Dagger2 official page:http://google.github.io/dagger/

Рекомендую почитать Fernando Cejas про паттерны проектирования. Мирослав Станек очень хорошо описал скоупы. У него есть замечательная статья о том, как правильно управлять @Retention(RUNTIME) и вовремя чистить память. И, конечно, посетите официальную страницу Dagger2.

Гибриды против натуралов

Чтобы с чего-то начать, давайте прибегнем к проверенному и надежному способу — загуглим интересующую нас проблему. Гугл выдает десятки статей, написанных словно под копирку. Различного рода блогеры, программисты, менеджеры, рекламщики, мамы рекламщиков, бабушки менеджеров и прочие люди, которые «отлично» разбираются в этом вопросе, пытаются интересно, индивидуально и с юмором донести до нас следующие вещи:

  1. Существуют чистые веб-приложения, которые выглядят почти как нативные. Например, app.ft.com. Их следует отделять от гибридных.
  2. Чистые веб-приложения без сети не работают.
  3. Интересное наблюдение: контент чистых веб-приложений легче искать. Просто вбейте интересующий вас запрос в поисковике и, если Google вас любит, пользователь увидит именно ваш сайт на первой странице поисковой выдачи.
  4. Еще одно интересное наблюдение: гибридные и нативные приложения должны соответствовать определенным правилам, для того чтобы их можно было опубликовать в AppStore или GooglePlay. С другой стороны, вы вполне можете запилить свой уютненький сайт-приложение с чернухой и вырвиглазным дизайном, и вам слова никто не скажет.
  5. Трудозатраты при написании гибридных приложений меньше, в сравнении с нативными, так как весь код пишется сразу на все платформы.
  6. Да и разработчиков нужно меньше. Просто найдем пару крепких парней, которые знают HTML и JavaScript. Они нам все и напишут. А то ищи всяких Java, С#, С++, Objective-C разработчиков и потом еще всей этой ораве деньги плати.

  7. Поддержка гибридных приложений обходится дешевле, так как, опять же, вроде как код один для всех платформ. Меняем в одном месте — и готово.
  8. Нативные приложения работают гораздо быстрее гибридных и веб-приложений.
  9. Нативное приложение может работать со всеми компонентами устройства, тогда как у гибридных и веб приложений этот доступ ограничен. Например, доступ к камере в нативных приложениях — это нечто само собой разумеющееся. А вот чтобы гибрид вашей камерой пофоткал — это нужно извернуться.>
  10. При разработке нативных приложений мы получаем оригинальный UI для каждой платформы. Гибридные и веб этого не могут.

Гибриды

Так как опыта работы с PhoneGap и с другими фреймворками подобного рода у меня не особо много, то я решил обсудить этот вопрос с нашим JS/HTML разработчиком, который писал программу при помощи фреймворка PhoneGap. Оказывается, на данный момент большая часть описанных проблем решена. На этой страничке переодетый Черный Властелин обещает нам, что теперь реакция на клики будет проходить быстро и безболезненно. Существует вагон и маленькая тележка различных плагинов, которые позволяют получить доступ к различным системам целевого устройства. А если чего и нету, то можно свой плагин написать. И кажется, что вот оно — отличное решение для кросс-платформенной разработки мобильных апп! Но давайте задумаемся поглубже над этой проблемой.

Что это за волшебные пилюли — плагины, которые решают все проблемы? Может, это какая-то магия? К сожалению, магии в нашем мире нет. По крайней мере, в IT. Плагины — это JavaScript обертки над нативным кодом Android или iOS. То есть, по сути, PhoneGap — это GUI, который на самом деле является веб-приложением, выполняемым в WebView. Логическая часть программы, выполняющаяся при помощи плагинов, которые на самом деле являются вызовами нативного кода через JavaScript, взаимодействует с устройством. Теперь, зная составляющие фонгап приложения, мы можем порассуждать о том, как все это будет работать.

  1. Что ты знаешь о боли? WebView для Android версии 4.3 ужасно тормозит, когда требуется показать что-то чуть более сложное, чем текстовую инфу. В версии 4.4 движком для WebView стал Chromium, так что, возможно, это немного исправит ситуацию. В целом, для всех фонгаперов и иже с ними это означает боль и страдание при попытке запустить приложение на Android. На iOS ситуация с этим намного лучше, так как движок на сафари работает получше.
  2. — Простите, вы женщина? — Я буду кем ты захочешь, малыш. В зависимости от девайса, для интерфейса приложения могут применяться разные стили. Это, конечно, не плохо, но логики дизайна не меняет. Есть кнопка Назад» на iOS — значит, будет она и на Android. И не важно, что она там никому не нужна. Еще один пример — Actionbar. На iOS он традиционно находится внизу экрана, на Android — в верхней части экрана. В приложении на PhoneGap у вас Actiobar не будет менять положение в зависимости от девайса, он будет просто выглядеть по-разному. И еще один момент: каждая OC имеет определенные особенности. Например, анимация. Посмотрите на iOS и Android. Анимация переходов между экранами. Она разная! Гибридные приложения не смогут воспроизвести эти особенности.
  3. Разруха не в клозетах, а в головах. Еще один важный фактор, который почему-то никто не учитывает. Разработчики на PhoneGap — это обычно Фронт-енд разработчики. Они понятия не имеют о том, как должен выглядеть интерфейс под Android или iOS, так как не читали стайл-гайды. Они ничего не знают об особенностях платформы, потому что не читали документацию. Но они хорошо умеют делать сайты. Соответственно, вы получите приложение, похожее на сайт. Оно вам надо? Точно надо? Посмотрите на эту картинку? Вы все еще уверены в своем выборе?

PhoneGap приложение

  1. Гномики? Это вы? Далее к плагинам. Это просто куски кода, которые решают некоторые задачи. Вы также можете использовать их в нативном приложении. Проблема в том, что зачастую ваше приложение должно решать задачи, которые чуть-чуть, самую малость, отличаются от тех, что решают эти куски кода. То есть, их нужно будет менять, но кто это будет делать? Ваш разработчик знает только JavaScript и HTML. Еще один тонкий момент — совмещение плагинов от разных разработчиков. Если плагины работают в смежных областях, они вполне могут использовать одни и те же компоненты. За счет этого можно получить интересные побочные эффекты. И последний камень в огород плагинов: некоторые из них не особо популярны и, как следствие, плохо оттестированы. Будьте готовы к тому, что вам самим придется выступить в роли тестировщика.

В общем, что я хочу сказать? Кроссплатформенность в данном случае мнимая, и приложения будут выглядеть странно. Я думаю, гибридные приложения стоит использовать в качестве прототипов, на которых можно оценить реакцию пользователей на вашу идею и получить некоторый фидбек. Для продакшн-версии лучше все-таки использовать нативные приложения. Эти рассуждения актуальны для всех гибридов, работающих на связке HTML/JS.