В этом уроке
- Понимание обратных вызовов жизненного цикла
- Укажите activity для запуска вашего приложения
- Создайте новый экземпляр
- Уничтожьте activity
Вы также должны прочитать
Попробуйте
ActivityLifecycle.zip
В отличие от других парадигм программирования, в котором приложения запускаются с помощью метода main()
, Android система инициирует код в экземпляре Activity
, вызывая конкретные методы обратного вызова, которые соответствуют конкретным этапам ее жизненного цикла. Существует последовательность методов обратного вызова, которые запускают activity , и последовательность методов обратного вызова, которые уничтожают activity .
Этот урок представляет собой обзор важнейших методов жизненного цикла и показывает вам, как справиться с первым обратным вызовом жизненного цикла, который создает новый экземпляр вашей activity.
[wpanchor id=»1″]
Понимание обратных вызовов жизненного цикла
Во время жизни вашей activity , система вызывает базовый набор методов жизненного цикла в последовательности, аналогичной ступенчатой пирамиды. То есть, каждый этап жизненного цикла activity является отдельным шагом пирамиды. Поскольку система создает новый экземпляр activity , каждый метод обратного вызова перемещает состояние activity на один шаг вверх. Верхняя часть пирамиды это точка, в которой activity работает на переднем плане, и пользователь может взаимодействовать с ней.
Когда пользователь начинает покидать activity , система вызывает другие методы, которые перемещают состояние activity назад вниз по пирамиде, чтобы демонтировать activity . В некоторых случаях, activity переместится только по часть пути вниз пирамиды, и будет ждать (например, когда пользователь переключился на другое приложение), из какой точки оно сможет вернуться к вершине (если пользователь вернется к м), и возобновит работу там, где пользователь остановился.
В зависимости от сложности вашей м, вам, вероятно, не нужно реализовывать все методы жизненного цикла. Тем не менее, важно, чтобы вы понимали каждый из них, и реализовали те, которые обеспечивают поведения вашего приложения, как ожидают его пользователи. Правильная реализация ваших методов жизненного цикла деятельности гарантирует, что ваше приложение будет вести себя хорошо в различных ситуациях, в том числе:
- Не завершиться аварийно, когда пользователь получает телефонный звонок или переключается на другое приложение, во время использования вашего.
- Не потребляет системные ресурсы, когда пользователь не использовать его активно.
- Не теряет прогресс пользователя, когда они оставляют свое приложение и возвращаются к нему позже.
- Не завершается аварийно и не теряет прогресс пользователя, когда экран вращается между книжной и альбомной ориентацией.
Вы узнаете в следующих уроках, есть несколько ситуаций, в которых activity переходит между различными состояниями, которые проиллюстрированы на рисунке 1. Тем не менее, только три из этих состояний могут быть статическим. То есть, activity может существовать только в одном из трех состояний в течение продолжительного периода времени:
- Resumed (возобновлена)
- В этом состоянии, activity находится на переднем плане, и пользователь может с ней взаимодействовать. (Также иногда это состоянии называется «работает».)
- Paused (приостановлена)
- В этом состоянии, activity частично закрыта другой activity — другая activity находится в переднем плане, полупрозрачна или не покрывает весь экран. Приостановленная деятельность не принимать пользовательский ввод и не может выполнять какой-либо код.
- Stopped (остановлена)
- В этом состоянии, activity полностью скрыта и не видна пользователю; это расценивается как работа в фоновом режиме. Во время остановки, экземпляр activity , и вся его информация о состоянии, такая как переменные-члены классов сохраняется, но он не может выполнять какой-либо код.
Другие состояния (Created (создана) и Started (запущена)) являются временными и система быстро переходит от них к следующему состоянию, вызвав следующий метод обратного вызова жизненного цикла. То есть, после того, как система вызывает onCreate()
, она быстро вызывает onStart()
, , за которым быстро следует onResume()
.
Вот и все основные этапы жизненного цикла activity . Теперь вы начнете изучать некоторое конкретное поведения жизненного цикла.
[wpanchor id=»2″]
Укажите activity для запуска вашего приложения
Когда пользователь выбирает ваш значок приложения на главном экране, система вызываетonCreate()
метод для Activity
объекта в вашем приложении, который вы объявили как «главную» activity . Это activity , которая выступает в качестве основной точки входа в пользовательский интерфейс вашего приложения.
Вы можете задать, какая activity будет использоваться в качестве главной деятельности в Android файле манифеста, AndroidManifest.xml
, который находится в корневом каталоге проекта.
Главная activity вашего приложения должна быть объявлена в манифесте с помощью<intent-filter>
, который включает в себя MAIN
действие и LAUNCHER
категорию. Например:
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Примечание: Когда вы создаете новый Android проект с помощью инструментов Android SDK, файлы проекта по умолчанию включают Activity
класс, который объявлен в манифесте, использую данный фильтром.
Если или MAIN
действие или LAUNCHER
категория не объявлены для одной из ваших activity , то ваш значок приложения не будет появляться в списке Главного экрана приложений.
[wpanchor id=»3″]
Создайте новый экземпляр
Большинство приложений включают в себя несколько различных activity , которые позволяют пользователю выполнять различные действия. Является ли activity главной деятельностью, которая создается, когда пользователь нажимает на значок приложения, или является другой activity , которую ваше приложение запускает в ответ на действие пользователя, система создает каждый раз новый экземпляр Activity
вызывая его onCreate()
метод.
Вы должны реализовать onCreate()
метод для выполнения основной логики запуска приложения, которая должна выполниться только один раз в течение всего периода жизни вашей activity . Например, ваша реализация onCreate()
должна определить пользовательский интерфейс, и, возможно, создать экземпляры переменных в области видимости класса.
Например, следующий пример onCreate()
метода показывает некоторый код, который выполняет некоторые фундаментальные настройки для activity , такие как объявление интерфейса пользователя (определенного в XML файле макета), определение переменных-членов класса, а также настройка некоторых элементов пользовательского интерфейса.
TextView mTextView; // Member variable for text view in the layout @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar // does not behave as a button ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }
Внимание: Использование SDK_INT
для предотвращения старых систем от выполнения нового API работает только на Android 2.0 (Уровень API 5) и выше. Старые версии столкнутся исключением во время выполнения.
После того, как onCreate()
завершает выполнение, система вызывает onStart()
и onResume()
методы в быстрой последовательности. Ваша activity никогда не будет находиться в Created или Started состоянии. Технически, activity становится видна пользователю когда onStart()
вызвана, но onResume()
незамедлительно следует за ней, и activity остается в Resumed состоянии, пока что-то не произойдет, чтобы изменить это, например, при получении телефонного звонка, пользователь переходит на другую activity , или когда экран устройства выключается.
В следующих уроках, вы увидите, как другие методы запуска, onStart()
и onResume()
, полезны во время жизненного цикла вашей activity , когда происходит возобновление полноценной работы из Paused или Stopped состояния.
Примечание:onCreate()
метод включает в себя параметр savedInstanceState
, который обсуждается в последнем уроке Повторное создание activity .
Уничтожьте activity
В то время как первым методом обратного вызова жизненного цикла activity являетсяonCreate()
, его самым последним обратным вызовов является onDestroy()
. Система вызывает этот метод для вашей activity в качестве окончательного сигнала, о том что экземпляр activity сейчас будет полностью удален из памяти системы.
Большинству приложений не нужно реализовывать этот метод, потому что локальные ссылки на классы уничтожаются вместе с activity , а ваша activity должна была выполнить большую часть очистки во время выполнения onPause()
и onStop()
. Однако, если ваша activity имеет фоновые потоки, которые вы создали во время onCreate()
или другие долгосрочные ресурсы, которые потенциально могут привести к утечке памяти, если не будут закрыты, то вы должны остановить и освободить их во время onDestroy()
.
@Override public void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); }
Примечание: Система вызывает onDestroy()
после того, как уже вызван onPause()
и onStop()
во всех ситуациях, кроме одного: когда вы вызываете finish()
внутри onCreate()
метода. В некоторых случаях, например, когда ваша activity работает для временного принятия решения, чтобы запустить другое действие, вы могли бы назвать finish()
внутри onCreate()
для уничтожения activity . В этом случае, система немедленно вызывает onDestroy()
без вызова любого другого метода жизненного цикла.