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.javapackage 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 приложения из двух активностей представлен здесь. |