public
abstract
class
BaseActivity
extends
AppCompatActivity
{
@Nullable
@BindView
(
R
.
id
.
toolbar
)
Toolbar mToolbar
;
@Override
public
void
onCreate
(
Bundle savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
getLayoutId
());
if
(
mToolbar
!=
null
)
{
mToolbar
.
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back
);
setSupportActionBar
(
mToolbar
);
50
getSupportActionBar
().
setHomeButtonEnabled
(
true
);
}
onAction
();
}
@Override
public
boolean
onOptionsItemSelected
(
MenuItem item
)
{
switch
(
item
.
getItemId
())
{
case
android
.
R
.
id
.
home
:
{
finish
();
return
true
;
}
}
return
super
.
onOptionsItemSelected
(
item
);
}
protected
abstract
void
onAction
();
protected
abstract
int
getLayoutId
();
}
Код 2. Реализация базового класса Activity
В отличие от многих приложений Java, приложения Android не
содержат метода main. Вместо этого в них используются четыре типа
исполняемых компонентов — активности (activities), службы (services),
провайдеры контента и широковещательные приемники (broadcast receivers).
Приложение может иметь много активностей, одна из которых — первое, что
мы видим при запуске приложения. Пользователи взаимодействуют с
активностями через представления (views) — компоненты GUI, наследующие
откласса View (пакет android.view).
До выхода Android 3.0 с каждым экраном приложения обычно
связывалась
отдельная
активность.
Активность
может
управлять
несколькими фрагментами (fragments). На телефоне каждый фрагмент
обычно занимает целый экран, а активность переключается между
фрагментами на основании взаимодействий пользователя. На планшетах
активности часто отображают несколько фрагментов на экран, чтобы более
эффективно использовать доступное пространство.
51
На протяжении своего существования активность может находиться в
одном из нескольких состояний — активном (то есть выполняемом),
приостановленном или остановленном. Переходы активностей между этими
состояниями происходят в ответ на различные события. «Активная
активность» отображается на экране и «обладает фокусом» — то есть
взаимодействует с пользователем. Приостановленная активность видна на
экране, но не обладает фокусом (например, на время отображения
диалогового окна с сообщением). Пользователь не может взаимодействовать
с приостановленной активностью, пока она снова не станет активной —
например, после того, как пользователь закроет диалоговое окно.
Остановленная активность не отображается на экране и, вероятно, будет
уничтожена системой, когда потребуется освободить занимаемую ею память.
Активность останавливается, когда другая активность переходит в активное
состояние. Например, когда мы отвечаем на телефонный звонок,
приложение, управляющее звонками, становится активным, а предыдущее
приложение останавливается. При переходах активности между этими
состояниями исполнительная среда Android вызывает различные методы
жизненного цикла (все эти методы определяются в классе Activity из пакета
android.app). В приложениях для каждой активности будет переопределяться
метод onCreate. Этот метод вызывается исполнительной системой Android
при запуске активности — то есть когда ее графический интерфейс готов к
отображению, чтобы пользователь мог взаимодействовать с активностью.
Также у активностей существуют другие методы жизненного цикла: onStart,
onPause, onRestart, onResume, onStop и onDestroy.
Каждый переопределяемый вами метод жизненного цикла активности
должен вызывать версию метода из суперкласса; в противном случае
происходит исключение. Вызов версии суперкласса необходим, потому что
каждый метод жизненного цикла в суперклассе Activity содержит код,
который должен выполняться помимо кода, определяемого вами в
переопределенных методах жизненного цикла.
52
При использовании новых возможностей на более ранних платформах
Android разработчик сталкивается с проблемой обеспечения совместимости.
Теперь Google открывает доступ ко многим новым возможностям Android
через Android Support Library — набор библиотек, благодаря которым
разработчик может использовать эти возможности на современных и старых
платформах Android. Одна из таких библиотек — AppCompat —
обеспечивает поддержку панели приложения (которая прежде называлась
панелью действий) и других возможностей на устройствах Android 2.1 (API
7) и выше; напомним, что панель приложения впервые появилась в Android
3.0 (API 11). Обновленные шаблоны приложений Android Studio тоже
используют библиотеку AppCompat, поэтому новые приложения, которые мы
создадим, будут работать почти на всех устройствах Android. Шаблон
Android Studio Empty Activity определяет класс MainActivity приложения как
субкласс AppCompatActivity (пакет package android.support.v7.app) —
непрямого субкласса Activity, обеспечивающего использование новых
средств Android на современных и старых платформах Android.
Android также поддерживает неявные (implicit) интенты — разработчик
не указывает компонент для обработки интента. Например, можно создать
интент для отображения содержимого URL-адреса и поручить Android
запустить наиболее подходящую активность (браузер) в зависимости от типа
данных. Если действие и информация, переданная startActivity, могут быть
обработаны несколькими активностями, система выводит диалоговое окно, в
котором пользователь выбирает активность. Если система не может найти
активность для обработки действия, метод startActivity инициирует
исключение ActivityNotFoundException. В общем случае рекомендуется
предусмотреть обработку этого исключения в программах. Также можно
предотвратить возникновение самого исключения — используйте метод
resolveActivity класса Intent для определения того, существует ли активность
для обработки интента.
53
Для любой Activity вызывается метод onCreate, он отвечает за создание
окна. Для того чтобы можно было отобразить вид окна вызывается метод
setContentView в который передается числовое значение идентификатора
ресурса отображения, получаемого от класса потомка. Здесь так же
устанавливается ActionBar, который есть у всех Activity приложения.
Следующий метод onOptionsItemSelected отвечает за обработку
нажатия меню, которое находится в ActionBar в виде стандартной кнопки
“Назад”. В случае если кнопка была нажата пользователем, то тогда
происходит завершение работы находящейся на переднем плане Activity.
Ниже идут два абстрактных метода onAction и getLayoutId, которые обязаны
реализовать потомки данного класса, первый метод вызывается у потомка
после инициализации предыдущих элементов метода onCreate, второй при
запросе идентификатора ресурса вида.
Следующим ключевым элементом приложения является класс
ViewFactory который отвечает за создание классов представлений
приложения, которые имеют интерфейс BaseView который унифицирует
работу с представлениями в приложении.
Достарыңызбен бөлісу: |