- Уроки
- Урок 1. Введение.
- Урок 2. Установка Android Studio
- Урок 3. Создание AVD. Первое приложение. Структура Android-проекта.
- Урок 4. Компоненты экрана и их свойства
- Урок 5. Layout-файл в Activity. XML представление. Смена ориентации экрана.
- Урок 6. Виды Layouts. Ключевые отличия и свойства.
- Уроки
- Урок 21. Создание и вызов Activity
- Урок 22. Intent, Intent Filter, Context — теория
- Урок 23. Activity Lifecycle. В каких состояниях может быть Activity
- Урок 24. Activity Lifecycle, пример смены состояний с двумя Activity
- Урок 25. Task. Что это такое и как формируется
- Урок 26. Intent Filter — практика
- Урок 27. Читаем action из Intent
- Урок 28. Extras — передаем данные с помощью Intent
- Урок 29. Вызываем Activity и получаем результат. Метод startActivityForResult
- Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode
- Урок 31. Зачем у Intent есть атрибут data. Что такое Uri. Вызываем системные приложения
- Урок 32. Пишем простой браузер
- Урок 33. Хранение данных. Preferences.
- Урок 34. Хранение данных. SQLite
- Урок 35. SQLite. Методы update и delete с указанием условия
- Урок 36. SQLite. Подробнее про метод query. Условие, сортировка, группировка
- Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLite. Метод rawQuery.
- Урок 38. Транзакции в SQLite. Небольшой FAQ по SQLite.
- Урок 39. onUpgrade. Обновляем БД в SQLite
- Урок 40. LayoutInflater. Учимся использовать.
- Language
- Автор сайта
- Социальные сети
- Группа ВКонтакте
- Поддержка проекта
- Уроки
- Урок 101. Создаем свой ContentProvider
- Урок 102. Touch – обработка касания
- Урок 103. MultiTouch – обработка множественных касаний
- Урок 104. Android 3. Fragments. Lifecycle
- Урок 105. Android 3. Fragments. Динамическая работа
- Урок 106. Android 3. Fragments. Взаимодействие с Activity
- Урок 107. Android 3. ActionBar. Размещение элементов
- Урок 108. Android 3. ActionBar. Навигация — табы и выпадающий список
- Урок 109. Android 3. Fragments. ListFragment — список
- Урок 110. Android 3. Fragments. DialogFragment — диалог
- Урок 111. Android 3. Fragments. PreferenceFragment — настройки. Headers
- Урок 112. Android 3. ActionBar. Динамическое размещение элементов
- Урок 113. Android 3. ActionMode, как альтернатива контекстному меню
- Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов
- Урок 115. Одно приложение на разных экранах
- Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity
- Урок 117. Виджеты. Создание. Lifecycle
- Урок 118. Виджеты. Конфигурационный экран. Обновление
- Урок 119. PendingIntent – флаги, requestCode. AlarmManager
- Урок 120. Виджеты. Обработка нажатий
- Language
- Автор сайта
- Социальные сети
- Группа ВКонтакте
- Поддержка проекта
- Полный список
Уроки
Урок 1. Введение.
Это урок-введение. Здесь мы пока ничего кодить не будем, я распишу причины, которые побудили меня создать этот сайт.
Урок 2. Установка Android Studio
Для того, чтобы писать программы — нужна среда разработки. В этом уроке мы подробно рассмотрим, как установить и настроить эту среду разработки.
Я буду описывать установку применимо к операционной системе Windows 7.
Урок 3. Создание AVD. Первое приложение. Структура Android-проекта.
Для того, чтобы тестировать приложения, нам понадобится Android Virtual Device (AVD). Это эмулятор Android-смартфона, на который мы сможем устанавливать созданные нами приложения, и запускать их там. Давайте его создадим.
Урок 4. Компоненты экрана и их свойства
Давайте посмотрим, как в Андроид приложениях формируется то, что мы видим на экране.
Урок 5. Layout-файл в Activity. XML представление. Смена ориентации экрана.
На прошлом уроке мы выяснили, что Activity читает layout-файл и отображает то, что в нем сконфигурировано. Теперь выясним, откуда Activity знает, какой именно layout-файл читать.
Урок 6. Виды Layouts. Ключевые отличия и свойства.
Расположение View-элементов на экране зависит от ViewGroup (Layout), в которой они находятся. В этом уроке мы рассмотрим основные виды Layout.
LinearLayout – отображает View-элементы в виде одной строки (если он Horizontal) или одного столбца (если он Vertical). Я использовал это на прошлом уроке, когда демонстрировал использование layout-файлов при смене ориентации.
TableLayout – отображает элементы в виде таблицы, по строкам и столбцам.
RelativeLayout – для каждого элемента настраивается его положение относительно других элементов.
AbsoluteLayout – для каждого элемента указывается явная позиция на экране в системе координат (x,y)
Источник
Уроки
Урок 21. Создание и вызов Activity
В этом уроке мы:
— создадим и вызовем второе Activity в приложении
Урок 22. Intent, Intent Filter, Context — теория
— разбираемся в коде урока 21
— теория по Intent и Intent Filter
— немного о Context
Урок 23. Activity Lifecycle. В каких состояниях может быть Activity
— Activity LifeCycle – поведение Activity при создании, вызове, закрытии
Урок 24. Activity Lifecycle, пример смены состояний с двумя Activity
— изучаем смену состояния на примере двух Activity
Урок 25. Task. Что это такое и как формируется
— немного теории по Task
— фиксируем Activity в состоянии Paused
Урок 26. Intent Filter — практика
— вызываем Activity, используя неявный вызов и Intent Filter
Урок 27. Читаем action из Intent
— читаем action из Intent
Урок 28. Extras — передаем данные с помощью Intent
— передаем данные с помощью Intent
Урок 29. Вызываем Activity и получаем результат. Метод startActivityForResult
— вызываем Activity с возвратом результата
Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode
— разбираемся, зачем нужны requestCode и resultCode в onActivityResult
Урок 31. Зачем у Intent есть атрибут data. Что такое Uri. Вызываем системные приложения
— узнаем, что такое Uri и Intent-атрибут data
— вызываем системные приложения (браузер, звонилка, карта)
Урок 32. Пишем простой браузер
— пишем простой браузер
Урок 33. Хранение данных. Preferences.
— хранение данных с помощью Preferences
Урок 34. Хранение данных. SQLite
— хранение данных с помощью SQLite
Урок 35. SQLite. Методы update и delete с указанием условия
— используем методы update и delete с указанием условия
Урок 36. SQLite. Подробнее про метод query. Условие, сортировка, группировка
— подробно разбираем метод чтения данных query
— используем сортировку, группировку, условия, having
Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLite. Метод rawQuery.
— читаем данные из связанных таблиц
— используем rawQuery
Урок 38. Транзакции в SQLite. Небольшой FAQ по SQLite.
— используем транзакции при работе с БД
Урок 39. onUpgrade. Обновляем БД в SQLite
— меняем версию и обновляем структуру БД в onUpgrade
Урок 40. LayoutInflater. Учимся использовать.
— разбираем как можно использовать LayoutInflater
Language
Автор сайта
Никакие другие люди не имеют к этому сайту никакого отношения и просто занимаются плагиатом.
Социальные сети
В канале я публикую ссылки на интересные и полезные статьи по Android
В чате можно обсудить вопросы и проблемы, возникающие при разработке
Группа ВКонтакте
Поддержка проекта
Яндекс
410011180491924
WebMoney
R248743991365
Z551306702056
© Start Android, 2011-2020. Все права защищены, копирование материалов возможно только с разрешения автора
При возникновении каких-либо вопросов, используйте форму обратной связи
Источник
Уроки
Урок 101. Создаем свой ContentProvider
— создаем свой ContentProvider
Урок 102. Touch – обработка касания
Урок 103. MultiTouch – обработка множественных касаний
— обрабатываем множественные касания
Урок 104. Android 3. Fragments. Lifecycle
— используем фрагменты
— разбираемся в их lifecycle
Урок 105. Android 3. Fragments. Динамическая работа
— динамически работаем с фрагментами
Урок 106. Android 3. Fragments. Взаимодействие с Activity
— рассмотрим взаимодействие между Activity и ее фрагментами
Урок 107. Android 3. ActionBar. Размещение элементов
— размещаем элементы в ActionBar
Урок 108. Android 3. ActionBar. Навигация — табы и выпадающий список
— используем навигацию в ActionBar
Урок 109. Android 3. Fragments. ListFragment — список
— работаем с ListFragment
Урок 110. Android 3. Fragments. DialogFragment — диалог
— работаем с DialogFragment
Урок 111. Android 3. Fragments. PreferenceFragment — настройки. Headers
— работаем с PreferenceFragment
— используем Headers
Урок 112. Android 3. ActionBar. Динамическое размещение элементов
— программно размещаем элементы в ActionBar
— используем элементы из фрагментов
Урок 113. Android 3. ActionMode, как альтернатива контекстному меню
— работаем с ActionMode
Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов
— разбираемся, зачем нужна библиотека Support Library
— на примере фрагментов используем библиотеку v4
Урок 115. Одно приложение на разных экранах
— учитываем ориентацию и размер экрана в работе приложения
Урок 116. Поведение Activity в Task. Intent-флаги, launchMode, affinity
— меняем поведение Activity в Task
Урок 117. Виджеты. Создание. Lifecycle
— создаем простой виджет
— разбираемся в его Lifecycle
Урок 118. Виджеты. Конфигурационный экран. Обновление
— настраиваем виджет при размещении
— работаем с view-компонентами виджета при обновлении
Урок 119. PendingIntent – флаги, requestCode. AlarmManager
— подробно разбираемся с PendingIntent
— используем AlarmManager
Урок 120. Виджеты. Обработка нажатий
— обрабатываем нажатия на виджет
Language
Автор сайта
Никакие другие люди не имеют к этому сайту никакого отношения и просто занимаются плагиатом.
Социальные сети
В канале я публикую ссылки на интересные и полезные статьи по Android
В чате можно обсудить вопросы и проблемы, возникающие при разработке
Группа ВКонтакте
Поддержка проекта
Яндекс
410011180491924
WebMoney
R248743991365
Z551306702056
© Start Android, 2011-2020. Все права защищены, копирование материалов возможно только с разрешения автора
При возникновении каких-либо вопросов, используйте форму обратной связи
Источник
Полный список
— создаем, запускаем и останавливаем простой сервис
Для начала надо определиться, как по-русски называть Service. Общепринятый перевод – служба. Наиболее популярный пример – службы в Windows. Но для системы Android мне привычнее использовать слово сервис. Его я и буду использовать в своих уроках для обозначения Service.
И еще один момент надо сразу прояснить. Service прописывается в манифесте рядом с Activity, и получается, что приложение (Application) содержит в себе и Activity и сервис. Предлагаю для упрощения изложения материала под словом приложение понимать все таки только Activity, которые можно запустить и увидеть на экране. Т.е. то, что мы раньше и называли приложением. А сервис считать отдельной от приложения вещью. А если надо будет обозначить приложение, как контейнер для Activity и сервиса, буду использовать слово Application.
Т.е. приложение – это набор Activity, сервис – Service. Приложение + сервис = Application. Как то так.
Итак, сервис – это некая задача, которая работает в фоне и не использует UI. Запускать и останавливать сервис можно из приложений и других сервисов. Также можно подключиться к уже работающему сервису и взаимодействовать с ним.
В качестве примера можно рассмотреть алгоритм почтовой программы. Она состоит из приложения и сервиса. Сервис работает в фоне и периодически проверяет наличие новой почты, скачивает ее и выводит уведомления. А когда вы запускаете приложение, оно отображает вам эти загруженные сервисом письма. Также приложение может подключиться к сервису и поменять в нем, например, период проверки почты или совсем закрыть сервис, если постоянная проверка почты больше не нужна.
Т.е. сервис нужен, чтобы ваша задача продолжала работать, даже когда приложение закрыто. В ближайших уроках мы разберемся, какие способы взаимодействия существуют между приложением и сервисом. В этом же уроке создадим простейший сервис, который будет выводить что-нибудь в лог. А приложение будет запускать и останавливать сервис.
Project name: P0921_ServiceSimple
Build Target: Android 2.3.3
Application name: ServiceSimple
Package name: ru.startandroid.develop.p0921servicesimple
Create Activity: MainActivity
Добавим в strings.xml строки:
Две кнопки – для запуска и остановки сервиса. И ProgressBar.
Рядом с MainActivity создайте класс MyService, наследующий android.app.Service
У сервиса так же, как и у Activity есть методы onCreate и onDestroy – которые срабатывают при создании и уничтожении сервиса.
Метод onStartCommand – срабатывает, когда сервис запущен методом startService. В нем мы запускаем наш метод someTask, который пока пуст. У onStartCommand на вход и на выход идут параметры, мы их пока не используем.
Метод onBind нам пока не интересен. Но реализовать его мы обязаны, возвращаем null.
someTask – здесь будем кодить работу для сервиса
Сервис, как и новые, создаваемые Activity необходимо прописать в манифесте. Делается это полностью аналогично. Жмете Add, выбираете Service. И в поле Name выбираете MyService.
Здесь у нас два метода, которые срабатывают при нажатии на кнопки Start service и Stop service. В них мы соответственно запускаем или останавливаем сервис методами startService и stopService. На вход передаем Intent, указывающий на сервис. Это очень похоже на то, как мы вызываем Activity методом startActivity.
Давайте все сохраним и запустим приложение.
Нажмем Start service и смотрим лог:
Выполнился метод onCreate – сервис создался, и onStartCommand – сервис выполняет содержимое метода onStartCommand.
Если мы теперь еще раз нажмем Start service:
Сервис уже создан, onCreate не вызывается, выполняется только метод onStartCommand.
Жмем Stop service
Убедимся, что сервис не зависит от приложения. Жмем Start service.
Сервис запущен. Закрываем приложение кнопкой Назад. В логах тишина, onDestroy в сервисе не выполнился, сервис продолжает жить. Ему все равно, работает приложение, его запустившее или не работает.
Долгим удержанием клавиши Домой выведем список последних приложений
снова откроем наше приложение и нажмем Stop service. В логах:
Теперь попробуем выполнять что-нибудь осмысленное в onStartCommand. Перепишем метод someTask в MyService.java:
Будем с интервалом в 1 секунду выводить в лог записи из сервиса.
Все сохраним, запустим и нажмем Start service:
ProgressBar замер, экран стал недоступен. А логи идут:
Вывод – сервис работает в основном потоке и блокирует экран.
Вынесем цикл с паузами в отдельный поток. И чтобы два раза не бегать, давайте заодно узнаем, что делает метод stopSelf.
Перепишем метод someTask:
Мы вынесли код в отдельный поток и добавили вызов метода stopSelf – этот метод аналогичен методу stopService, он останавливает сервис, в котором был вызван.
Все сохраняем, запускаем и жмем Start service. ProgressBar крутится, экран не блокирован, логи идут:
Сервис создался, выполнил работу и сам остановился методом stopSelf.
На следующем уроке:
— передаем данные в сервис
— рассматриваем методы остановки сервиса stopSelf и stopSelfResult
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник