Афоризм
Я выгляжу неполохо. Но не часто.
Наталья Резник
Последние статьи

 • Синхронизаторы потока
Примеры синхронизаторов пакета java.util.concurrent.
май 2019
 • Сервисы в Android
Неявное Intent отправки Email.
апрель 2019
 • Сервисы в Android
Описание и пример создания Android сервиса.
апрель 2019
 • Вызов AlarmClock
Неявное Intent для вызова AlarmClock.
март 2019
 • Намерения Intent
Описание Intent, фильтры объектов Intent.
март 2019
 • Пример 2-х Activity
Жизненные циклы 2-х Activity android положения.
март 2019
 • Описание Activity
Жизненный цикл Activity android положения.
февраль 2019
 • Отладка приложения
Logcat для просмотра сообщений, настройка BuildConfig.
февраль 2019
 • Настройка ListView
Настройка интерфейса прокручиваемого списка ListView.
февраль 2019
 • Фоновое изображение
Адаптация изображения при смене положения android.
январь 2019
 • Cписок ListView
Прокручиваемый список ListView в android.
январь 2019

Жизненные циклы двух Activity

Для использования в приложении нескольких Activity необходимо :

  • для каждой активности создать свой шаблон layout.xml описания интерфейса;
  • зарегистрировать активность в файле манифеста приложения manifests/AndroidManifest.xml.

На странице описания жизненного цикла активности была использована только одна Activity. В этой статье рассмотрим жизненные циклы двух активностей на примере перехода от одной Activity к другой и обратно.

Описание интерфейсов активностей

Для каждой активности создаем свой файл описания интерфейса; назовем их : first.xml, second.xml. Интерфейсы активностей подобны и включают компонент представления изображения и кнопку перехода к другой активности. На следующем скриншоте представлен интефейс первой (first) активности в Android Studio.

Каждая из активностей представляет свое изображение. Как загрузить изображение в проект и отобразить в интерфейсе описано здесь. Ниже представлены листинги файлов описания интерфейсов двух активностей.

Листинг first.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".FirstActivity">

    <ImageView
        android:id="@+id/imgViewer"
        android:layout_width="335dp"
        android:layout_height="423dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:background="@android:color/black"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.83"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/kuskovo" />

    <Button
        android:id="@+id/btnOpenSecond"
        android:layout_width="158dp"
        android:layout_height="63dp"
        android:layout_marginStart="36dp"
        android:layout_marginTop="32dp"
        android:text="Open second Activity"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imgViewer">
    </Button>
</android.support.constraint.ConstraintLayout>

Листинг second.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity">

    <ImageView
        android:id="@+id/imgViewer"
        android:layout_width="335dp"
        android:layout_height="423dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:background="@android:color/black"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.83"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/kolomenskoye" />

    <Button
        android:id="@+id/btnOpenFirst"
        android:layout_width="158dp"
        android:layout_height="63dp"
        android:layout_marginStart="36dp"
        android:layout_marginTop="32dp"
        android:text="Open first Activity"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imgViewer">
    </Button>

</android.support.constraint.ConstraintLayout>

Активности приложения

Коды активностей, также, как и их layout'ы, подобны. Отличия касаются только наименованиий определенных объектов :

  • тег протоколирования сообщений (TAG);
  • шаблон интерфейса (R.layout. ...);
  • загружаемый файл изображения (R.drawable. ...);
  • кнопка открытия другой активности (R.id.btn...);
  • класс загружаемой активности в методе onClick.

Активности реализуют интерфейс OnClickListener, поэтому включают/переопределяют (@Override) метод onClick(View), в котором выполняется вызов/открытие другой активности с использованием класса намерения Intent.

Листинг FirstActivity.java

package p08activity;

import android.util.Log;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;

import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.ImageView;

public class FirstActivity extends Activity 
                           implements OnClickListener
{
    final String TAG = "FIRST";
    
    @Override
    protected  void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);

        ImageView imageView = findViewById(R.id.imgViewer);
        imageView.setImageResource(R.drawable.kuskovo);

        Button btn;
        btn = (Button) findViewById(R.id.btnOpenSecond);
        btn.setOnClickListener(this);

        Log.d(TAG, "onCreate");
    }

    @Override
    public void onClick(View v) {
        Intent intent;
        intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }
}

Листинг SecondActivity.java

В листинге второй активности приведены только строки кода с отличиями.

...

public class SecondActivity extends Activity 
                            implements View.OnClickListener
{
    final String TAG = "SECOND";
    @Override
    protected  void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);

        ImageView imageView = findViewById(R.id.imgViewer);
        imageView.setImageResource(R.drawable.kolomenskoye);

        Button btn = findViewById(R.id.btnOpenFirst);
        btn.setOnClickListener(this);
        Log.d(TAG, "onCreate");
    }
    @Override
    public void onClick(View v) {
        Intent intent;
        intent = new Intent(this, FirstActivity.class);
        startActivity(intent);
    }
	...
}

Регистрация Activity в файле манифеста

Активности необходимо регистрировать в файле манифеста проекта manifests/AndroidManifest.xml. При создании нового модуля активность приложения java/[package_name]/MainActivity создается автоматически и заносится в манифест. Дополнительно используемые в приложении активности необходимо также зарегистрировать в файле манифеста. Ниже представлен код регистрации используемых в примере активностей :

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

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

    <activity android:name=".SecondActivity">
        <intent-filter>
             <action 
                 android:name=
                        "android.intent.action.DEFAULT" />
        </intent-filter>
    </activity>

</manifest>

Для второй активности SecondActivity секцию <intent-filter> можно было бы не использовать. Например :

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

Примечание : точка в наименовании активности означает наименование текущего пакета.

Старт примера

На следующих скриншотах представлены интерфейсы двух активностей.

Протоколирование состояний активностей, Logcat

Ниже представлены результаты протоколирования изменений состояний активностей. Вставленные комментарии не относятся к протоколированию процесса.

Обратите внимание (по временным отметкам), что при нажатии на кнопку открытия другой активности, сначала вызывается метод onPause() текущей активности, после этого открывается (создается и стартует) другая активность. И только после этого, когда активность не видна на экране устройства, она останавливается, т.е. вызывается метод onStop. Восстановления активности из остановленного состояни начинается с вызова метода onCreate.

Листинг Logcat


02-28 08:55:28.290 5894-5894/p08activity D/FIRST: onCreate
02-28 08:55:28.291 5894-5894/p08activity D/FIRST: onStart
02-28 08:55:28.295 5894-5894/p08activity D/FIRST: onResume

// нажатие кнопки перехода 1-ой активности
02-28 08:58:10.427 5894-5894/p08activity D/FIRST: onPause

// открывается 2-ая активность
02-28 08:58:10.810 5894-5894/p08activity D/SECOND: onCreate
02-28 08:58:10.811 5894-5894/p08activity D/SECOND: onStart
02-28 08:58:10.845 5894-5894/p08activity D/SECOND: onResume

// останов 1-ой активности
02-28 08:58:11.484 5894-5894/p08activity D/FIRST: onStop

// нажатие кнопки перехода 2-ой активности
02-28 08:58:25.543 5894-5894/p08activity D/SECOND: onPause

// восстановление 1-ой активности
02-28 08:58:25.581 5894-5894/p08activity D/FIRST: onCreate
02-28 08:58:25.584 5894-5894/p08activity D/FIRST: onStart
02-28 08:58:25.593 5894-5894/p08activity D/FIRST: onResume

// останов 2-ой активности
02-28 08:58:26.111 5894-5894/p08activity D/SECOND: onStop
 

Связанные страницы

Layout интерфейса приложения Android
Представление изображений в Android
Жизненный цикл Activity
Объект намерения Intent
Отладка приложения, Logcat

  Рейтинг@Mail.ru