Статьи

Что такое жизненный цикл активности Android?

В моем предыдущем посте вы узнали, что Intents позволяет отправлять сообщения с одного компонента Android на другой. Ну, один из очень важных компонентов — это активность.

Действия являются фундаментальной частью разработки приложений для Android. И невозможно понять Деятельности, не понимая их жизненных циклов. В этом посте вы узнаете все о жизненном цикле деятельности.

  • Android SDK
    Что такое Android Intents?

Активность — это один экран в Android. Это как окно в настольном приложении или фрейм в программе Java. Активность позволяет вам разместить все ваши компоненты пользовательского интерфейса или виджеты вместе на экране.

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

Давайте более подробно рассмотрим жизненный цикл Android Activity. Каждый раз, когда изменяется состояние Activity, в классе Activity будет вызываться один из следующих методов жизненного цикла.

onCreate() : вызывается при первой инициализации действия. Вам необходимо реализовать этот метод для выполнения любой инициализации, специфичной для вашей Деятельности.

onStart() : это вызывается в первый раз, когда действие становится видимым для пользователя, поскольку действие готовится выйти на передний план и становится интерактивным. Как только этот обратный вызов завершится, будет вызван метод onResume() .

onResume() : когда действие переходит в это состояние, оно начинает взаимодействовать с пользователем. Активность продолжается в этом состоянии, пока что-то не сфокусируется на приложении или активности (например, на входящем звонке). Когда это происходит, onPause() метод onPause() .

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

onStop() : этот метод вызывается, когда действие больше не отображается в приложении. Это может произойти, например, когда другая активность была загружена и занимает полный экран устройства. Когда вызывается этот метод, говорят, что Activity находится в остановленном состоянии. В этом состоянии система либо вызывает onRestart() чтобы вернуть интерактивность с Activity. Или он вызывает метод onDestroy() для уничтожения Activity.

onDestroy() : onDestroy() перед уничтожением действия. Система вызывает этот метод, когда пользователь завершает действие или потому что система временно уничтожает процесс, содержащий действие, чтобы сэкономить место. Обязательно высвободите все ресурсы, созданные вашей деятельностью в этом методе, иначе ваше приложение будет иметь утечку памяти!

onRestart() : onRestart() когда действие перезапускается после его остановки.

В большинстве случаев взаимодействия пользователя с приложением активная активность изменяется. Таким образом, приложение переходит между действиями много раз в течение своей жизни.

Необходимо связать действия вместе, когда одно действие должно начать другое действие. Чтобы запустить Activity, вы можете использовать startActivity() или startActivityForResult() . Вы должны передать намерение в любом случае.

startActivity() используется, если вновь запущенному Activity не нужно возвращать результат.

В следующем фрагменте кода показано, как запустить другое действие с помощью этого метода:

1
2
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

Вы также можете выполнять такие действия, как передача данных из одного действия в другое. В этом случае ваша текущая активность (вызывающая активность) хочет передать данные целевой активности. Вот где Intents пригодится. Чтобы узнать, как использовать Intents для запуска Activity, прочитайте мою предыдущую статью .

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

Вы получаете результат от Activity в onActivityResult(int requestCode, int resultCode, Intent data) . Результат будет возвращен как Намерение.

Вот пример, чтобы показать, как работает запуск действия.

Сначала вы создаете MainActivity с onCreate() метода onCreate() , файла макета и кода запроса.

01
02
03
04
05
06
07
08
09
10
11
12
public class MainActivity extends Activity {
 
     // Unique request code for each use case
     private static final int REQUEST_CODE_EXAMPLE = 0x9345;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }
    
 }

В вашем onCreate() вы создадите новый экземпляр намерения начать второе действие.

Когда вы будете готовы запустить это действие, скажем, в ответ на нажатие кнопки, вы startActivityForResult() , который передаст вновь созданное намерение и код запроса.

1
2
3
4
5
// Create a new instance of Intent to start SecondActivity
 final Intent intent = new Intent(this, SecondActivity.class);
 
 // This starts SecondActivity with the request code
 startActivityForResult(intent, REQUEST_CODE_EXAMPLE);

Тем не менее, в вашей MainActivity вам нужно обрабатывать события результата Activity. Вы делаете это путем реализации onActivityResult() . Вот как вы получите результат от другой деятельности.

Вот как это должно выглядеть:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// onActivityResult only get called
   // when the other Activity previously started using startActivityForResult
   @Override
   public void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
 
       // First we need to check if the requestCode matches the one we used.
       if(requestCode == REQUEST_CODE_EXAMPLE) {
 
           // The resultCode is set by the SecondActivity
           // By convention RESULT_OK means that whatever
           // SecondActivity did was executed successfully
           if(resultCode == Activity.RESULT_OK) {
               // Get the result from the returned Intent
               final String result = data.getStringExtra(SecondActivity.EXTRA_DATA);
 
               // Use the data — in this case, display it in a Toast.
               Toast.makeText(this, «Result: » + result, Toast.LENGTH_LONG).show();
           } else {
               // setResult wasn’t successfully executed by SecondActivity
               // Due to some error or flow of control.
           }
       }
   }

Теперь идите вперед и создайте свой SecondActivity . Это должно выглядеть примерно так, как показано ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_detail);
 
       final Button button = (Button) findViewById(R.id.button);
       // When this button is clicked we want to return a result
       button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               // Create a new Intent object as container for the result
               final Intent data = new Intent();
 
               // Add the required data to be returned to the MainActivity
               data.putExtra(EXTRA_DATA, «Some interesting data!»);
                
               // Set the resultCode as Activity.RESULT_OK to
               // indicate a success and attach the Intent
               // which contains our result data
               setResult(Activity.RESULT_OK, data);
 
               // With finish() we close the SecondActivity to
               // return back to MainActivity
               finish();
           }
       });
   }

Перед завершением действия будут вызваны соответствующие методы жизненного цикла.

Метод onPause() должен остановить все слушатели и обновления пользовательского интерфейса. Метод onStop() должен сохранять данные приложения. Наконец, метод onDestroy() освобождает любые ресурсы, выделенные Activity.

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

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

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

Чтобы сохранить состояние активности, вы можете переопределить метод onSaveInstanceState() . Этот метод передается объект Bundle в качестве параметра. Пакет может содержать строки, примитивные типы данных или объекты. В этом методе просто добавьте любые важные данные о состоянии в комплект. Этот пакет будет возвращен в Activity позже, чтобы вы могли восстановить состояние Activity.

Чтобы извлечь сохраненное состояние из пакета и восстановить его, реализуйте метод onRestoreInstanceState() . Этот обратный вызов вызывается между методами жизненного цикла onStart() и onResume() .

Мы подробнее рассмотрим состояние экземпляра Activity в следующей статье.

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

Спасибо за чтение, и пока вы здесь, ознакомьтесь с некоторыми другими нашими статьями о кодировании приложений для Android.

  • Android
    Android с нуля: обзор разработки приложений для Android
    Ашраф Хатхибелагал
  • Android SDK
    Как монетизировать ваши приложения для Android с помощью AdMob
    Чике Мгбемена
  • Котлин
    Kotlin From Scratch: переменные, базовые типы и массивы
    Чике Мгбемена