Жизненный цикл активности в Android с демонстрационным приложением
В Android действие называется одним экраном в приложении. Это очень похоже на одно окно любого настольного приложения. Приложение Android состоит из одного или нескольких экранов или действий.
Каждое действие проходит различные этапы или жизненный цикл и управляется стеками действий. Поэтому, когда начинается новое действие, предыдущее всегда остается ниже него. Есть четыре этапа деятельности.
- Если действие находится на переднем плане экрана, то есть наверху стека, оно считается активным или запущенным. Обычно это действие, с которым в данный момент взаимодействует пользователь.
- Если какое-либо действие потеряло фокус, а не полноразмерное или прозрачное действие сосредоточилось на самом верху вашей деятельности. В таком случае либо другое действие занимает более высокую позицию в многооконном режиме, либо само действие не может быть сфокусировано в текущем оконном режиме. Такая деятельность вполне живая.
- Если действие полностью скрыто другим действием, оно останавливается или скрывается. Он по-прежнему сохраняет всю информацию, и, поскольку его окно скрыто, система часто убивает его, когда в другом месте требуется память.
- Система может уничтожить активность из памяти, либо попросив ее завершить, либо просто прервав процесс. Когда он снова отображается для пользователя, он должен быть полностью перезапущен и восстановлен до предыдущего состояния.
Для каждого этапа 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() }
|