Appcompatactivity android studio что это

Activity

Activity и жизненный цикл приложения

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

Все объекты activity представляют собой объекты класса android.app.Activity , которая содержит базовую функциональность для всех activity. В приложении из прошлой темы мы напрямую с этим классом не работали, а MainActivity наследовалась от класса AppCompatActivity . Однако сам класс AppCompatActivity, хоть и не напрямую, наследуется от базового класса Activity.

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

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

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

После запуска activity проходит через ряд событий, которые обрабатываются системой и для обработки которых существует ряд обратных вызовов:

Схематично взаимосвязь между всеми этими обратными вызовами можно представить следующим образом

onCreate()

onCreate — первый метод, с которого начинается выполнение activity. В этом методе activity переходит в состояние Created. Этот метод обязательно должен быть определен в классе activity. В нем производится первоначальная настройка activity. В частности, создаются объекты визуального интерфейса. Этот метод получает объект Bundle , который содержит прежнее состояние activity, если оно было сохранено. Если activity заново создается, то данный объект имеет значение null. Если же activity уже ранее была создана, но находилась в приостановленном состоянии, то bundle содержит связанную с activity информацию.

После того, как метод onCreate() завершил выполнение, activity переходит в состояние Started , и и система вызывает метод onStart()

onStart

В методе onStart() осуществляется подготовка к выводу activity на экран устройства. Как правило, этот метод не требует переопределения, а всю работу производит встроенный код. После завершения работы метода activity отображается на экране, вызывается метод onResume , а activity переходит в состояние Resumed.

onResume

При вызове метода onResume activity переходит в состояние Resumed и отображается на экране устройства, и пользователь может с ней взаимодействовать. И собственно activity остается в этом состоянии, пока она не потеряет фокус, например, вследствии переключения на другую activity или просто из-за выключения экрана устройства.

onPause

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

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

Читайте также:  Хуавей хонор обновить андроид

После выполнения этого метода activity становится невидимой, не отображается на экране, но она все еще активна. И если пользователь решит вернуться к этой activity, то система вызовет снова метод onResume , и activity снова появится на экране.

Другой вариант работы может возникнуть, если вдруг система видит, что для работы активных приложений необходимо больше памяти. И система может сама завершить полностью работу activity, которая невидима и находится в фоне. Либо пользователь может нажать на кнопку Back (Назад). В этом случае у activity вызывается метод onStop .

onStop

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

При этом во время состояния Stopped activity остается в памяти устройства, сохраняется состояние всех элементов интерфейса. К примеру, если в текстовое поле EditText был введен какой-то текст, то после возобновления работы activity и перехода ее в состояние Resumed мы вновь увидим в текстовом поле ранее введенный текст.

Если после вызова метода onStop пользователь решит вернуться к прежней activity, тогда система вызовет метод onRestart . Если же activity вовсе завершила свою работу, например, из-за закрытия приложения, то вызывается метод onDestroy() .

onDestroy

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

Также следует отметить, что при изменении ориентации экрана система завершает activity и затем создает ее заново, вызывая метод onCreate .

В целом переход между состояниями activity можно выразить следующей схемой:

Расмотрим несколько ситуаций. Если мы работаем с Activity и затем переключаемся на другое приложение, либо нажимаем на кнопку Home, то у Activity вызывается следующая цепочка методов: onPause -> onStop . Activity оказывается в состоянии Stopped. Если пользователь решит вернуться к Activity, то вызывается следующая цепочка методов: onRestart -> onStart -> onResume .

Другая ситуация, если пользователь нажимает на кнопку Back (Назад), то вызывается следующая цепочка onPause -> onStop -> onDestroy . В результате Activity уничтожается. Если мы вдруг захотим вернуться к Activity через диспетчер задач или заново открыв приложение, то activity будет заново пересоздаваться через методы onCreate -> onStart -> onResume

Управление жизненным циклом

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

Для логгирования событий здесь используется класс android.util.Log .

В данном случае обрабатываются все ключевые методы жизненного цикла. Вся обработка сведена к вызову метода Log.d() , в который передается TAG — случайное строковое значение и строка, которая выводится в консоли Logcat в нижней части Android Studio, выполняя роль отладочной информации. Если эта консоль по умолчанию скрыта, то мы можем перейти к ней через пункт меню View -> Tool Windows -> Logcat .

И при запуске приложения мы сможем увидеть в окне Logcat отладочную информацию, которая определяется в методах жизненного цикла activity:

Источник

Разбираемся с ActionBar(App Bar) и AppCompatActivity

ActionBar — основная панель инструментов, которая может отображать заголовок Activity, иконку поиска и другие интерактивные элементы.

Вот так выглядит приложение без ActionBar (API level 7).

А вот так выглядит приложение с ActionBar (API level 7) при помощи AppCompatActivity и Support Library release 23.

ActionBar появился в Android 3.0 (API level 11), и стал отображаться в верхней части окна Activity, при использовании темы Holo или одной из ее тем-потомков.

Для получения дополнительной информации по Action Bar прочитайте документацию тут ActionBar API level 11 и тут ActionBar Support Library 23.0.0

Читайте также:  Apple carplay андроид авто

Начиная с Android L (API level 21), ActionBar, в application layout, может быть представлен виджетом Toolbar.

Поддержка ActionBar в старых версиях Android начиная с API level 7 осуществляется с помощью AppCompatActivity.

Для того, чтобы добавить поддержку ActionBar в старых версиях Android, нам нужно расширить наш главный класс MainActivity от AppCompatActivity.

Так же нам нужно импортировать (v7 appcompat library) библиотеку поддержки 7-ой версии.

Весь код файла MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity <
@Override
protected void onCreate(Bundle savedInstanceState) <
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
>
>

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



Внимание! Начиная с Support Library release 26.0.0 (July 2017), минимальная версия API Level увеличилась до Android 4.0 (API level 14). То есть, если мы хотим использовать Support Library версии 26 и выше, то при компиляции файла apk, минимальная версия SDK теперь должна быть 14.

В Support Library release 24+, минимальная версия API — это API level 9, получается для поддержки API level 7, нам нужна Support Library release 23.

Для того, что бы посмотреть, что добавили или исправили в новом релизе Support Library нажимаем тут.

Источник

Русские Блоги

Понимание активности и AppCompatActivity в Android

Я не знаю, обнаружили ли вы, что при использовании Eclipse для разработки приложений Android, при создании проекта MainActivity автоматически наследует Activity, а при использовании Android Studio для разработки приложений Android при создании проекта он автоматически наследует AppCompatActivity. Мы использовали Eclipse и AS для создания и запуска проекта и обнаружили, что унаследованный родительский класс отличается, но интерфейс такой же, как показано на следующем рисунке:

Как видите, в верхней части интерфейса появится панель действий, а по умолчанию будет отображаться имя панели инструментов проекта. Ниже мы будем родительский класс в проекте AS Попробуйте заменить AppCompatActivity на Activity вручную.

После запуска программы вы можете обнаружить, что верхняя часть ActionBar исчезла.Код наследует Activity, но интерфейс, который она запускает, действительно отличается. Таким образом, при создании проекта в AS AppCompatActivity наследуется автоматически.

ActionBar вперед совместимый , Появляется в поддержке v7, если вам нужно использовать совместимую версию панели действий, а затем наследовать ActionBarActivity, предоставляемую поддержкой v7 (она наследует FragmentActivity). Когда был запущен Android 5.0, появилось много нового, поэтому также была обновлена ​​поддержка v7 и появилась AppCompatActivity. AppCompatActivity используется для замены ActionBarActivity, если вы измените родительский класс в коде на ActionBarActivity вы найдете, что подсказка устарела.

Activity is the base class of all other activities, I don’t think it will be deprecated. The relationship among them is:

Activity FragmentActivity AppCompatActivity ActionBarActivity

‘ ActionBarActivity is deprecated, use AppCompatActivity instead.

So basically, using AppCompatActivity is always the right choise. The differences between them:

  • Activity is the basic one.
  • Based on Activity , FragmentActivity provides the ability to use Fragment .
  • Based on FragmentActivity , AppCompatActivity provides features to ActionBar

В Android 5.0 Панель инструментов заменила ActionBar, а ActionBarActivity была заменена на AppCompatActivity, тогда метод использования состоит в том, чтобы ввести настройки панели инструментов в Activity.

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

Источник

Что такое расширение AppCompatActivity по сравнению с ActionBarActivity?

android.support.v7.app.AppCompatActivity был добавлен в последнюю библиотеку поддержки v7 как новую функцию вчера.

Говорят, что ActionBarActivity устарел в пользу новой AppCompatActivity и что AppCompatActivity является базовым классом для действий, которые используют функции панели поддержки библиотеки поддержки. Итак, каковы новые возможности AppCompatActivity над ActionBarActivity ? Какие улучшения имеет AppCompatActivity ActionBarActivity ? И какие преимущества AppCompatActivity ? Может ли кто-нибудь предоставить несколько образцов?

Любые советы приветствуются. И спасибо заранее.

PS: меня больше всего удивило то, что AppCompatActivity который расширен от android.support.v4.app.FragmentActivity является прямым родительским классом ActionBarActivity ! Я имею в виду фактически, что ActionBarActivity может делать все, что может сделать AppCompatActivity , почему Android вытолкнул последний?

Читайте также:  Com google android gms internal

Между тем, я увидел сообщение в блоге, в котором говорится: « Это не переименование ActionBarActivity в AppCompatActivity , внутренняя логика AppCompat доступна через AppCompatDelegate », так что же такое « внутренняя логика » AppCompat ? Что может сделать AppCompatDelegate ? Может ли кто-нибудь опубликовать некоторые коды об этом?

Как писал Крис, новая устаревшая версия ActionBarActivity (расширяющая класс AppCompatActivity ) является безопасным для использования класса обратной совместимости. Его устаревание – это всего лишь подсказка, по которой вы попросите вместо этого использовать новую AppCompatActivity . AppCompatActivity – это новая, более общая реализация, которая использует внутренний класс AppCompatDelegate .

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

Что касается AppCompatDelegate , он позволяет вам иметь новые тонированные виджеты в активности, которые не являются ни AppCompatActivity ни ActionBarActivity .

Например, вы наследуете активность из внешней библиотеки, которая, в свою очередь, не наследуется от AppCompatActivity но вы хотите, чтобы в этом действии были виджеты с тонированными материалами (представлениями). Чтобы это произошло, вам нужно создать экземпляр AppCompatDelegate внутри вашей активности, переопределить методы этого действия, такие как addContentView() , setContentView() и т. Д. (См. AppCompatDelegate javadoc для полного списка методов) и внутри этих переопределенных методов вперёд Вызовы внутреннего экземпляра AppCompatDelegate . AppCompatDelegate сделает все остальное, и ваша «старомодная» деятельность будет «материализована».

В основном это изменение имени: ActionBarActivity не описывает все, что сейчас делает. Вы можете безопасно использовать ActionBarActivity если хотите. Подумайте об этом как о символической ссылке.

Библиотека поддержки AppCompat началась с скромных, но важных начинаний: единой последовательной панели действий для всех устройств API 7 и выше. В редакции 21 он взял на себя новую ответственность : привнесение цветовой палитры материала, тонировка виджета, поддержка панели инструментов и многое другое для всех устройств API 7+. При этом имя ActionBarActivity действительно не охватывало весь объем того, что он действительно делал .

AppCompatActivity была представлена ​​в Android-SDK с момента выпуска библиотеки appcompat поддержки Android .

AppCompatActivity – это прямой дочерний класс FragmentActivity поддержки v4 и прямой родительский класс ActionBarActivity .

AppCompatActivity – это базовый класс для действий, которые используют функциональные возможности панели поддержки библиотеки .

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

Что касается поддержки библиотеки appcompat v7, она добавляет поддержку шаблона проектирования пользовательского интерфейса Action Bar . Эта библиотека включает поддержку реализаций пользовательских интерфейсов дизайна материалов .

Вот несколько ключевых классов, включенных в библиотеку v7 appcompat:

  • ActionBar – обеспечивает реализацию шаблона пользовательского интерфейса панели действий.
  • AppCompatActivity – добавляет класс активности приложения, который может использоваться как базовый класс для действий, которые используют реализацию панели действий библиотеки поддержки .
  • AppCompatDialog – добавляет класс диалога, который может использоваться в качестве базового класса для тематических диалогов AppCompat .
  • ShareActionProvider – добавляет поддержку стандартизованного действия совместного использования (например, электронная почта или публикация в социальных приложениях), которые могут быть включены в панель действий.

После загрузки библиотек поддержки Android эта библиотека находится в каталоге / extras / android / support / v7 / appcompat / .

Раньше единственная точка входа в AppCompat – это уже устаревший класс ActionBarActivity . К сожалению, это заставило вас использовать установленную иерархию Activity, которая сделала невозможным использование функции PreferenceActivity .

См. Библиотеки поддержки chris banes-v22-1-0 для получения дополнительной информации

Последняя версия библиотеки поддержки android, 22.1, обесценивает ActionBarActivity в пользу AppCompatActivity , которая обещает привести единый согласованный ActionBar для всех устройств, начиная с уровня API 7 и выше

Источник

Оцените статью