410013796724260
• Webmoney
R335386147728
Z369087728698
Жизненные циклы двух ActivityДля использования в приложении нескольких Activity необходимо :
На странице описания жизненного цикла активности была использована только одна 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'ы, подобны. Отличия касаются только наименованиий определенных объектов :
Активности реализуют интерфейс 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. Листинг Logcat02-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 приложения из двух активностей представлен здесь. |
