Запуск новых Activity. Жизненный цикл Activity.

Урок 15 — Запуск новых Activity. Жизненный цикл Activity.

Существует не так много приложений, состоящих из всего лишь одного экрана. В более-менее серьёзных приложениях несколько экранов, а в крупных — десятки.

Как вы помните, экран приложения, то есть совокупность элементов интерфейса — это Activity. Что если мы захотели добавить в наше приложение функцию установки других приложений из APK? Для этого нам потребуется создать ещё одну Activity, в которой мы будем выбирать файл APK.

Создайте новый класс:

Создание нового класса
Создание нового класса

Настройка нового класса
Настройка нового класса

Для этой Acitivity так же нужно создать соответствующий файл разметки. Создайте новый лэйаут с именем activity_file_picker и следующим контентом:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/files_rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

Теперь в FilePickerActivity создайте метод onCreate():

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_file_picker);
}

Последний шаг — осталось зарегистрировать созданную Activity в манифесте. Откройте AndroidManifest.xml. В нём вы увидите примерно следующее:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.packages">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

</manifest>

Как видите, одна Activity (основная) уже зарегистрирована. Добавим новую Activity сразу после неё:

<activity android:name=".FilePickerActivity" />

Эта запись Activity получилась заметно короче, потому что не содержит IntentFilter (что это такое — обсудим в следующих уроках).

Отлично, Activity полностью создана. Но как же её запустить?

Intent

В Android новые экраны запускаются не напрямую, а с использованием механизма Intent(намерение).

Intent — это специальный объект, с помощью которого мы можем сказать системе, что хотим выполнить какое-то действие. В основном Intentиспользуется для следующих трёх целей:

  • Запуск Activity. Мы можем запустить Activity из своего или чужого приложения, и, опционально, получить результат выполнения.
  • Запуск Service и привязка к сервису. Об этом поговорим попозже.
  • Отправка Broadcast — широковещательных сообщений. Об этом тоже позже.

Нас интересует первый пункт — запуск Activity. Тут есть два способа использования Intent. Intent может быть двух типов — явный и неявный.

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

При использовании неявного типа мы сообщаем системе, какое действие мы хотим выполнить (например, открыть URL в браузере, или поделиться каким-то контентом в социальных сетях), а Android уже самостоятельно выбирает, какую Activity из какого приложения использовать, или же предоставляет этот выбор пользователю.

Запуск Activity

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

Помните, как мы создавали меню? Помимо поиска мы добавили пункт с заголовком "Установить". Вот при нажатии на него мы и будем запускать новую Activity!

Создайте метод startFilePickerActivity() в MainActivity:

private void startFilePickerActivity() {
    Intent intent = new Intent(this, FilePickerActivity.class);
    startActivity(intent);
}

В первой строчке мы создаем Intent, первым параметром передаем контекст, вторым — класс той Activity, которую хотим запустить.

Во второй строчке сообщаем системе, что хотим запустить Activity, используя созданный нами Intent.

Теперь добавьте вызов этого метода в onOptionsItemSelected():

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.install_item:
            startFilePickerActivity();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

Запустите приложение, нажмите на overflow-меню, затем на пункт "Установить" и увидите, как Activity запустилась! :)

Запущенная Activity
Запущенная Activity

Пока что в ней пусто, но она уже отображается.

Жизненный цикл Activity

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

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

Посмотрите на эту схему:

Жизненный цикл Activity в Android
Жизненный цикл Activity в Android

В ней представлены переходы между состояниями в зависимости от различных событий. Основных состояний Activity — три:

  • Stopped — существует, но не отображается. В таком состоянии Activity находится, к примеру, когда она только создается, когда пользователь сворачивает приложение, или когда другая Activity отображается поверх неё.
  • Paused — существует, отображается, не в фокусе. В этом состоянии Activity находится, например, в процессе создания (когда она уже видна), или когда система собирается показать другую Activity поверх неё.
  • Resumed — существует, отображается, в фокусе. В этом состоянии происходит взаимодействие пользователя с Activity.

Продолжение доступно на платных тарифах

Это недорого — всего от 440 ₽ в месяц!


ВЫБРАТЬ ТАРИФ


Продолжение доступно после регистрации

Все уроки на сайте доступны абсолютно бесплатно после регистрации.

Регистрация займёт меньше минуты ;)