Введение в Android-
разработку
Android
Александр Вайцеховский
Особенности платформы
Достоинства
Широкие возможности платформы
Открытость
Интеграция с другими приложениями
Переиспользование библиотек
Java
Недостатки
Разное железо
Разные экраны
Разные производители устройств
Проблемы с памятью
Архитектура Android*
*Kitkat (Android 4.4 Api 19) и меньше
Архитектура Android*
*Lollipop (Andriod 5.0 Api 20) и старше
ART vs Dalvik
Особенности приложения
Приложение ↔ название пакета "com.noveogroup.application"
Приложeние ↔ Пользователь Linux
1 видимое приложение (2, начиная с Android N)
Жизненный цикл приложения ≠ жизненный цикл процесса
Управление жизненным циклом приложения и все View в UIThread
Application Framework
Application Framework
Это фреймворк!
построен на шаблоне Model-View-ViewModel (MVVM)
Строительные блоки
AndroidManifest.xml
Имя java-пакета (id приложения)
Объевление компонент:
Activity
Service
BroadcastReceiver
ContentProvider
Описание возможностей компоненты:
IntentFilter
Классы, реализующие их
Иконки, названия :)
Перечисление разрешений
Ограничение уровня Android API.
Мета-данные
И другое...
Структура проекта (IDEA)
1. специфика Intellij IDEA
2. Исходники
3. Activity
4. Ресурсы
5. Разметка Activity
6. Ресурсы значений (тут строки)
7. Ресурсы изображений (тут
картинки)
8. Генерируемые классы
9. R.java - контейнер id ресурсов
Структура проекта (IDEA)
Вместо bin/gen - build
Исходники и ресурсы вместе
Конфигурационные файлы Gradle даже
параметры из Manifest
Библиотеки можно как подкладывать
руками
...а можно подгружать автоматически
Ресурсы
Типы ресурсов
drawable
image
.png, .jpg, .gif
9patch
.9.png
.xml
vector, shape, selector
layout
anim
values:
строки, числа, цвета
xml
raw
Селекторы ресурсов
Ориентация
land, port
Плотность точек
ldpi, mdpi, hdpi, xhdpi,
nodpi
Размер экрана
small, normal, large, xlarge
sw720dp, sw600dp, ...
Версия Android
v3, ..., v15
Язык
en, fr, ru, ...
Ресурсы R.java
1 package com.noveogroup.example.app;
2
3 public final class R {
4 public R() {
5
6 public static final class string {
7 public static final int app_name = 2130968576;
8 public static final int hello_world = 2130968577;
9 }
10
11 public static final class layout {
12 public static final int activity_main = 2130903040;
13 }
14
15 public static final class drawable {
16 public static final int ic_launcher = 2130837504;
17 }
18
19 public static final class attr {
20 }
21 }
22 }
Строковые ресурсы
res/values/strings.xml
1 <string name="test">String</string>
2 <string name="test_arg">String with integer argument: %1$d</string>
res/values-ru/strings.xml
1 <string name="test">Строка</string>
2 <string name="test_arg">Cтрока с целочисленным аргументом: %1$d</string>
src/com/noveogroup/example/app/MainActivity.java
1 TextView simpleView = (TextView) findViewById(R.id.text_view_simple);
2 simpleView.setText(getString(R.string.test));
3
4 TextView argsView = (TextView) findViewByid(R.id.text_view_args)
5 argsView.setText(getString(R.string.test_arg, 50));
Жизненный цикл Activity
Восстановление Activity
Восстановление Activity
1 public class MainActivity extends Activity {
2 @Override
3 void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 }
6
7 @Override
8 void onRestoreInstanceState(Bundle savedInstanceState) {
9 super.onRestoreInstanceState(savedInstanceState);
10 }
11
12 @Override
13 void onSaveInstanceState(Bundle outState) {
14 super.onSaveInstanceState(outState);
15 }
16
17 @Override
18 void onDestroy() {
19 super.onDestroy();
20 }
21 }
Fragment
Доступны с API 11 (Android 3.0)
Портированы для старых версий в Android Support Library
Позволяют объединиться несколько экранов в одном.
Существуют только как часть Activity.
Fragment
Android L
API 20 - 22
Material Design
RecyclerView на замену ListView/GridView
ART Compiler
Улучшение уведомлений
Многое для SmartWatch, TV и Auto
Android M
API 23
Режиме Doze
нельзя в сеть
нельзя синхроинизироваться
работает с прерываниями
Безопасность
Runtime Permissions: опасные и не очень
Ограничение доступа к MAC-адресу
Apache HTTP Client
Много новых ViewGroup
App Links
* Приложения для старого API нормально запускаются
Android N
API 24
Многооконный режим
Масштабирование экрана
Режиме Doze
Нельзя: будить телефон, GPS, искать Wi-Fi
Уведомления:
Можно: обновлять, группировать, менять view
RemoteInput
Java 8 + Jack compiler
Закрыт доступ через NDK к закрытым API системы
* Приложения для старого API не работают, если экран масштабирован
Полезные ссылки
Документация Android
Android Developers Blog
Учебник по Android
Android L Changes
Android M Changes
Android N Changes

Введение в Android-разработку (Lecture 06 – basics)

  • 1.
  • 2.
    Особенности платформы Достоинства Широкие возможностиплатформы Открытость Интеграция с другими приложениями Переиспользование библиотек Java Недостатки Разное железо Разные экраны Разные производители устройств Проблемы с памятью
  • 3.
  • 4.
  • 5.
  • 6.
    Особенности приложения Приложение ↔название пакета "com.noveogroup.application" Приложeние ↔ Пользователь Linux 1 видимое приложение (2, начиная с Android N) Жизненный цикл приложения ≠ жизненный цикл процесса Управление жизненным циклом приложения и все View в UIThread
  • 7.
  • 8.
    Application Framework Это фреймворк! построенна шаблоне Model-View-ViewModel (MVVM)
  • 9.
  • 10.
    AndroidManifest.xml Имя java-пакета (idприложения) Объевление компонент: Activity Service BroadcastReceiver ContentProvider Описание возможностей компоненты: IntentFilter Классы, реализующие их Иконки, названия :) Перечисление разрешений Ограничение уровня Android API. Мета-данные И другое...
  • 11.
    Структура проекта (IDEA) 1.специфика Intellij IDEA 2. Исходники 3. Activity 4. Ресурсы 5. Разметка Activity 6. Ресурсы значений (тут строки) 7. Ресурсы изображений (тут картинки) 8. Генерируемые классы 9. R.java - контейнер id ресурсов
  • 12.
    Структура проекта (IDEA) Вместоbin/gen - build Исходники и ресурсы вместе Конфигурационные файлы Gradle даже параметры из Manifest Библиотеки можно как подкладывать руками ...а можно подгружать автоматически
  • 13.
    Ресурсы Типы ресурсов drawable image .png, .jpg,.gif 9patch .9.png .xml vector, shape, selector layout anim values: строки, числа, цвета xml raw Селекторы ресурсов Ориентация land, port Плотность точек ldpi, mdpi, hdpi, xhdpi, nodpi Размер экрана small, normal, large, xlarge sw720dp, sw600dp, ... Версия Android v3, ..., v15 Язык en, fr, ru, ...
  • 14.
    Ресурсы R.java 1 packagecom.noveogroup.example.app; 2 3 public final class R { 4 public R() { 5 6 public static final class string { 7 public static final int app_name = 2130968576; 8 public static final int hello_world = 2130968577; 9 } 10 11 public static final class layout { 12 public static final int activity_main = 2130903040; 13 } 14 15 public static final class drawable { 16 public static final int ic_launcher = 2130837504; 17 } 18 19 public static final class attr { 20 } 21 } 22 }
  • 15.
    Строковые ресурсы res/values/strings.xml 1 <stringname="test">String</string> 2 <string name="test_arg">String with integer argument: %1$d</string> res/values-ru/strings.xml 1 <string name="test">Строка</string> 2 <string name="test_arg">Cтрока с целочисленным аргументом: %1$d</string> src/com/noveogroup/example/app/MainActivity.java 1 TextView simpleView = (TextView) findViewById(R.id.text_view_simple); 2 simpleView.setText(getString(R.string.test)); 3 4 TextView argsView = (TextView) findViewByid(R.id.text_view_args) 5 argsView.setText(getString(R.string.test_arg, 50));
  • 16.
  • 17.
  • 18.
    Восстановление Activity 1 publicclass MainActivity extends Activity { 2 @Override 3 void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 } 6 7 @Override 8 void onRestoreInstanceState(Bundle savedInstanceState) { 9 super.onRestoreInstanceState(savedInstanceState); 10 } 11 12 @Override 13 void onSaveInstanceState(Bundle outState) { 14 super.onSaveInstanceState(outState); 15 } 16 17 @Override 18 void onDestroy() { 19 super.onDestroy(); 20 } 21 }
  • 19.
    Fragment Доступны с API11 (Android 3.0) Портированы для старых версий в Android Support Library Позволяют объединиться несколько экранов в одном. Существуют только как часть Activity.
  • 20.
  • 22.
    Android L API 20- 22 Material Design RecyclerView на замену ListView/GridView ART Compiler Улучшение уведомлений Многое для SmartWatch, TV и Auto
  • 24.
    Android M API 23 РежимеDoze нельзя в сеть нельзя синхроинизироваться работает с прерываниями Безопасность Runtime Permissions: опасные и не очень Ограничение доступа к MAC-адресу Apache HTTP Client Много новых ViewGroup App Links * Приложения для старого API нормально запускаются
  • 26.
    Android N API 24 Многооконныйрежим Масштабирование экрана Режиме Doze Нельзя: будить телефон, GPS, искать Wi-Fi Уведомления: Можно: обновлять, группировать, менять view RemoteInput Java 8 + Jack compiler Закрыт доступ через NDK к закрытым API системы * Приложения для старого API не работают, если экран масштабирован
  • 27.
    Полезные ссылки Документация Android AndroidDevelopers Blog Учебник по Android Android L Changes Android M Changes Android N Changes