Жизненный цикл активности в Android с демонстрационным приложением

Опубликовано: 5 Января, 2022

В Android действие называется одним экраном в приложении. Это очень похоже на одно окно любого настольного приложения. Приложение Android состоит из одного или нескольких экранов или действий.
Каждое действие проходит различные этапы или жизненный цикл и управляется стеками действий. Поэтому, когда начинается новое действие, предыдущее всегда остается ниже него. Есть четыре этапа деятельности.

  1. Если действие находится на переднем плане экрана, то есть наверху стека, оно считается активным или запущенным. Обычно это действие, с которым в данный момент взаимодействует пользователь.
  2. Если какое-либо действие потеряло фокус, а не полноразмерное или прозрачное действие сосредоточилось на самом верху вашей деятельности. В таком случае либо другое действие занимает более высокую позицию в многооконном режиме, либо само действие не может быть сфокусировано в текущем оконном режиме. Такая деятельность вполне живая.
  3. Если действие полностью скрыто другим действием, оно останавливается или скрывается. Он по-прежнему сохраняет всю информацию, и, поскольку его окно скрыто, система часто убивает его, когда в другом месте требуется память.
  4. Система может уничтожить активность из памяти, либо попросив ее завершить, либо просто прервав процесс. Когда он снова отображается для пользователя, он должен быть полностью перезапущен и восстановлен до предыдущего состояния.

Для каждого этапа android предоставляет нам набор из 7 методов, которые имеют собственное значение для каждого этапа жизненного цикла. На изображении показан путь миграции всякий раз, когда приложение переключается из одного состояния в другое.

Подробное описание каждого метода изложено ниже:

1. onCreate ()

Он вызывается при первом создании действия. Здесь выполняется вся статическая работа, такая как создание представлений, привязка данных к спискам и т. Д. Этот метод также предоставляет Bundle, содержащий его предыдущее замороженное состояние, если оно было.

Пример:

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
// Bundle containing previous frozen state
setContentView(R.layout.activity_main);
// The content view pointing to the id of layout
// in the file activity_main.xml
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
// Bundle containing previous frozen state
setContentView(R.layout.activity_main)
// The content view pointing to the id of layout
// in the file activity_main.xml
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
}

2. onStart ()

Он вызывается, когда действие видно пользователю. За ним следует onResume (), если действие вызывается из фона. Он также вызывается после onCreate () при первом запуске действия.

Пример :

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
// Bundle containing previous frozen state
setContentView(R.layout.activity_main);
// The content view pointing to the id of layout
// in the file activity_main.xml
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onStart()
{
// It will show a message on the screen
// then onStart is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onStart Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onStart() {
super .onStart()
// It will show a message on the screen
// then onStart is invoked
val toast = Toast.makeText(applicationContext, "onStart Called" , Toast.LENGTH_LONG).show()
}
}

3. onRestart ()

Он вызывается после того, как действие было остановлено и до его начальной стадии, и поэтому всегда сопровождается onStart (), когда какое-либо действие возобновляется из фона на экран.

Пример :

Джава



import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
// Bundle containing previous frozen state
setContentView(R.layout.activity_main);
// The content view pointing to the id of layout
// in the file activity_main.xml
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onRestart() {
// It will show a message on the screen
// then onRestart is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onRestart Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onRestart() {
super .onRestart()
// It will show a message on the screen
// then onRestart is invoked
val toast = Toast.makeText(applicationContext, "onRestart Called" , Toast.LENGTH_LONG).show()
}
}

4. onResume ()

Он вызывается, когда действие начинает взаимодействовать с пользователем. На этом этапе действие находится на вершине стека действий, и пользователь взаимодействует с ним. Всегда следует onPause (), когда действие переходит в фоновый режим или закрывается пользователем.

Пример :

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.example.share.R;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Bundle containing previous frozen state
super .onCreate(savedInstanceState);
// The content view pointing to the id of layout
// in the file activity_main.xml
setContentView(R.layout.activity_main);
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onResume() {
// It will show a message on the screen
// then onResume is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onResume Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onResume() {
super .onResume()
// It will show a message on the screen
// then onResume is invoked
val toast = Toast.makeText(applicationContext, "onResume Called" , Toast.LENGTH_LONG).show()
}
}

5. onPause ()

Он вызывается, когда действие уходит в фоновый режим, но еще не было остановлено. Это аналог onResume (). Когда действие запускается перед другим действием, этот обратный вызов будет вызываться в самом верхнем действии (в настоящее время на экране). Действие под активным действием не будет создано до тех пор, пока активное действие не вернет onPause (), поэтому не рекомендуется выполнять тяжелую обработку в этой части.

Пример :

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Bundle containing previous frozen state
super .onCreate(savedInstanceState);
// The content view pointing to the id of layout
// in the file activity_main.xml
setContentView(R.layout.activity_main);
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onPause() {
// It will show a message on the screen
// then onPause is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onPause Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onPause() {
super .onPause()
// It will show a message on the screen
// then onPause is invoked
val toast = Toast.makeText(applicationContext, "onPause Called" , Toast.LENGTH_LONG).show()
}
}

6. onStop ()

Он вызывается, когда действие не видно пользователю. За ним следует onRestart (), когда действие отменяется из фона, за ним следует onDestroy (), когда действие закрывается или завершается, и ничего, когда действие остается только в фоновом режиме. Обратите внимание, что этот метод никогда не может быть вызван в ситуациях с нехваткой памяти, когда системе не хватает памяти, чтобы поддерживать выполнение процесса действия после вызова его метода onPause ().

Пример :

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Bundle containing previous frozen state
super .onCreate(savedInstanceState);
// The content view pointing to the id of layout
// in the file activity_main.xml
setContentView(R.layout.activity_main);
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onStop() {
// It will show a message on the screen
// then onStop is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onStop Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onStop() {
super .onStop()
// It will show a message on the screen
// then onStop is invoked
val toast = Toast.makeText(applicationContext, "onStop Called" , Toast.LENGTH_LONG).show()
}
}

7. onDestroy ()

Последний вызов, полученный перед уничтожением действия. Это может произойти либо из-за того, что действие завершается (когда вызывается finish ()), либо из-за того, что система временно уничтожает этот экземпляр действия для экономии места. Чтобы различать эти сценарии, проверьте это с помощью метода isFinishing ().

Пример :

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Bundle containing previous frozen state
super .onCreate(savedInstanceState);
// The content view pointing to the id of layout
// in the file activity_main.xml
setContentView(R.layout.activity_main);
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onDestroy() {
// It will show a message on the screen
// then onDestroy is invoked
Toast toast = Toast.makeText(getApplicationContext(), "onDestroy Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onDestroy() {
super .onDestroy()
// It will show a message on the screen
// then onDestroy is invoked
val toast = Toast.makeText(applicationContext, "onDestroy Called" , Toast.LENGTH_LONG).show()
}
}

Демонстрационное приложение для Android для демонстрации жизненного цикла активности в Android

Джава

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast toast = Toast.makeText(getApplicationContext(), "onCreate Called" , Toast.LENGTH_LONG).show();
}
protected void onStart() {
super .onStart();
Toast toast = Toast.makeText(getApplicationContext(), "onStart Called" , Toast.LENGTH_LONG).show();
}
@Override
protected void onRestart() {
super .onRestart();
Toast toast = Toast.makeText(getApplicationContext(), "onRestart Called" , Toast.LENGTH_LONG).show();
}
protected void onPause() {
super .onPause();
Toast toast = Toast.makeText(getApplicationContext(), "onPause Called" , Toast.LENGTH_LONG).show();
}
protected void onResume() {
super .onResume();
Toast toast = Toast.makeText(getApplicationContext(), "onResume Called" , Toast.LENGTH_LONG).show();
}
protected void onStop() {
super .onStop();
Toast toast = Toast.makeText(getApplicationContext(), "onStop Called" , Toast.LENGTH_LONG).show();
}
protected void onDestroy() {
super .onDestroy();
Toast toast = Toast.makeText(getApplicationContext(), "onDestroy Called" , Toast.LENGTH_LONG).show();
}
}

Котлин

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toast = Toast.makeText(applicationContext, "onCreate Called" , Toast.LENGTH_LONG).show()
}
override fun onStart() {
super .onStart()
val toast = Toast.makeText(applicationContext, "onStart Called" , Toast.LENGTH_LONG).show()
}
override fun onRestart() {
super .onRestart()
val toast = Toast.makeText(applicationContext, "onRestart Called" , Toast.LENGTH_LONG).show()
}
override fun onPause() {
super .onPause()
val toast = Toast.makeText(applicationContext, "onPause Called" , Toast.LENGTH_LONG).show()
}