Activity (Действие) Andoid Studio

public class Activity

extends ContextThemeWrapper

implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, View.OnCreateContextMenuListener,ComponentCallbacks2

java.lang.Object
   ↳ android.content.Context
   ↳ android.content.ContextWrapper
   ↳ android.view.ContextThemeWrapper
   ↳ android.app.Activity
 Known Direct Subclasses (Прямые подклассы)

AccountAuthenticatorActivity Базовый класс для реализации Activity, который используется для реализации AbstractAccountAuthenticator.
ActivityGroup Этот класс устарел на API 13. Вместо этого используйте новые API-интерфейсы Fragmentи FragmentManager; они также доступны на старых платформах через пакет совместимости с Android.
AliasActivity Stub-активность, которая запускает другое действие (а затем завершается) на основе информации в манифестных метаданных своего компонента.
ExpandableListActivity Действие, которое отображает расширяемый список элементов путем привязки к источнику данных, реализующего ExpandableListAdapter, и предоставляет обработчики событий, когда пользователь выбирает элемент.
ListActivity Активность, которая отображает список элементов путем привязки к источнику данных, например массиву или курсору, и предоставляет обработчики событий, когда пользователь выбирает элемент.
NativeActivity Удобно для реализации activity, которая будет реализована исключительно в собственном коде.

Known Indirect Subclasses (Косвенные подклассы)

LauncherActivity Отображает список всех действий, которые могут выполняться для данного намерения (intent).
PreferenceActivity Это базовый класс для активности, показывающий иерархию предпочтений (preferences) для пользователя.
TabActivity This class was deprecated in API level 13. New applications should use Fragments instead of this class; to continue to run on older devices, you can use the v4 support library which provides a version of the Fragment API that is compatible down to 

Этот класс устарел на  API 13. Новые приложения должны использовать фрагменты вместо этого класса; для продолжения работы на старых устройствах вы можете использовать библиотеку поддержки v4, которая предоставляет версию API-интерфейсов Fragment, совместимую с DONUT

 

Activity – это единственная ведь, с которой взаимодействует пользователь. Класс Activity позволяет создать свой пользовательский интерфейс с помощью setContentView (View). Чаще всего действия представляют собой полноэкранные окна, но их можно настроить и по-другому: как плавающие окна (через тему с установкой windowIsFloating ) или встроенные внутри другого действия (с использованием ActivityGroup). Существует два метода, которые реализуют практически все подклассы Activity:

  • onCreate(Bundle)  – инициализирует Activity. Наиболее важно, что здесь вызывается  setContentView(int)с ресурсами макета (layout), определяющими ваш пользовательский интерфейс. Так же используетсяfindViewById(int) для извлечения виджета в этом пользовательском интерфейсе, с которым вам нужно будет взаимодействовать в коде. (Если проще, то эта функция позволяет связать элемент на макете с переменной в коде. Чтобы в дальнейшем имелась возможность воздействовать на элементы экрана. Например, вывести новый текст, изменить шрифт или сменить картинку Осла на картинку Единорога).
  • onPause() – этот метод определяет, что будет происходить, когда пользователь покидает вашу Activity. Обычно это связано с изменениями, которые сделал пользователь (обычно ContentProvider “закрепляет” такие данные).

Чтобы использоватьContext.startActivity(), все классы активности должны иметь соответствующее объявление  в файле AndroidManifest.xml.

 

Затронутые темы:

  1. Fragments (Фрагменты)
  2. Activity Lifecycle (Жизненный цикл Activity) 
  3. Configuration Changes (Изменения конфигурации)
  4. Starting Activities and Getting Results (Начало работы и получение результатов)
  5. Saving Persistent State (Сохранение постоянного состояния)
  6. Permissions (Права доступа)
  7. Process Lifecycle (Процесс жизненного цикла)

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

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

Fragments

Начиная с HONEYCOMB (Это название версии Андроид), Activity могут использовать класс Fragment , чтобы лучше писать свой код, создавать более сложные пользовательские интерфейсы для больших экранов и помогать масштабировать приложение для маленьких и больших экранов.

Жизненный цикл Activity

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

Activity имеет в четыре основных состояния:

– Если активность находится на переднем плане экрана (вверху стека), она активна или работает.
– Если активность потеряла фокус, но все еще видна , она приостанавливается. Приостановленная активность полностью живая (она поддерживает всю информацию о состоянии и членах и остается прикрепленной к оконному менеджеру), но может быть убита системой в ситуациях с крайне низкой памятью.
– Если Activity полностью закрыто другой деятельностью, она прекращается. Но по-прежнему сохраняет всю информацию о состоянии и членах, однако больше не отображается пользователю, поэтому ее окно скрыто, и она вскоре будет убито системой, когда в другом месте требуется память.
– Если действие приостановлено или остановлено, система может удалить Activity из памяти, попросив ее закончить работу или просто убить ее процесс. Когда Activity  снова отображается пользователю, Activity  будет полностью перезапущена и восстановлена до своего предыдущего состояния.

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

Есть три ключевых цикла, которые могут отслеживаться из вашей Activity:

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

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

Жизненный цикл на переднем плане Activity происходит между вызовом onResume() до соответствующего вызова onPause().  За это время активность перед всеми другими действиями и взаимодействием с пользователем. Activity может часто проходить между возобновленными и приостановленными состояниями – например, когда устройство переходит в спящий режим, когда передается результат Activity, когда передается новое намерение (intent), поэтому код в этих методах должен быть достаточно легким.

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

 

 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }


В общем, движение через жизненный цикл деятельности выглядит следующим образом:

Название метода Описание Убиваемый? Следующий
onCreate() Вызывается при первом запуске Activity . Здесь вы должны выполнить всю свою обычную статическую настройку: создать представления, привязать данные к спискам и т. д. Этот метод также предоставляет вам пакет (Bundle), содержащий ранее замороженные состояние активности, если они есть.
Всегда за ним следует onStart().
Нет onStart()
onRestart() Вызывается после того, как ваша активность была остановлена, до ее повторного запуска.
Всегда следуют onStart()
Нет onStart()
onStart() Вызывается, когда действие становится видимым для пользователя.
За ним следует onResume() если действие выходит на передний план, или onStop() если оно становится скрытым.
Нет onResume()or onStop()
onResume() Вызывается, когда действие начнет взаимодействовать с пользователем. На данный момент ваша деятельность находится в верхней части стека действий, при этом пользовательский ввод идет.
Всегда следует после  onPause().
Нет onPause()
onPause() Вызывается, когда система начнет возобновление предыдущего действия. Обычно используется для переноса несохраненных изменений в постоянные данные, остановки анимации например, т.е. ресурсы которые могут потреблять реусрсы процессора. Реализации этого метода должны быть очень быстрыми, потому что следующее действие не будет возобновлено до тех пор, пока этот метод не вернет результат (не завершится).
За ним следует либо onRestart() если операция возвращается к фронту, либо onDestroy() если она становится невидимой для пользователя.
Pre-HONEYCOMB onResume()or
onStop()
onStop() Вызывается, когда Activity больше не отображается пользователю, потому что другая Activity возобновлена. Это может произойти либо из-за того, что начинается новая Activity,  перед тем, как это происходит,  объект уничтожается.
За ним следует либо onRestart (), если Activity  возвращается для взаимодействия с пользователем, либо onDestroy (), если эта Activity уходит.
Да onRestart()or
onDestroy()
onDestroy() Последний вызов, который вы получаете до того, как ваша Activity будет уничтожена. Это может произойти либо потому, что активность завершена (некоторые вызывают finish ()), либо потому, что система временно уничтожает этот экземпляр активности для экономии места. Вы можете различать эти два сценария с методом isFinishing (). Да nothing

 

Обратите внимание на столбец «Killable»(убиваемый) в приведенной выше таблице – для тех методов, которые помечены как подлежащие уничтожению, после того, как этот метод вернет процесс, хостинг активности может быть убит системой в любое время без выполнения другой строки исполняемого кода.  Поэтому следует использовать метод onPause () для записи любых постоянных данных (например, прав пользователя) на хранение. Кроме того, метод onSaveInstanceState (Bundle) вызывается перед тем, как помещать активность в такое фоновое состояние, позволяя вам сэкономить любое динамическое состояние экземпляра в вашей деятельности в данном Bundle, чтобы позже получить его в onCreate (Bundle), если действие необходимо воссоздать. Дополнительную информацию о том, как жизненный цикл процесса привязан к действиям, которые он размещает, можно найти в разделе «Процесс жизненного цикла». Обратите внимание, что важно сохранить постоянные данные в onPause () вместо onSaveInstanceState (Bundle), потому что последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.

Имейте в виду, что  семантика незначительно изменяется в зависимости от версии платформы, начиная с HONEYCOMB и с таргетинга на предыдущие платформы. Начиная с Honeycomb, приложение не находится в состоянии killable, пока не вернется его onStop (). Это влияет, когда onSaveInstanceState (Bundle) может быть вызван (его можно безопасно вызывать после onPause (), и позволяет приложению безопасно ждать, пока onStop () не сохранит постоянное состояние.

For those methods that are not marked as being killable, the activity’s process will not be killed by the system starting from the time the method is called and continuing after it returns. Thus an activity is in the killable state, for example, between after onPause() to the start of onResume().

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

Изменения конфигурации

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

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

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

В некоторых особых случаях вы можете обойти перезапуск своей активности на основе одного или нескольких типов изменений конфигурации. Это делается с помощью атрибута android: configChanges в его манифесте. Для любых изменений конфигурации вы сообщаете об управлении с помощью вызова метода onConfigurationChanged (Конфигурация) текущей активности, а не перезапуска. Однако если изменение конфигурации связано с тем, что вы не обрабатываете, активность все равно будет перезапущена, а onConfigurationChanged (Configuration) не будет вызываться.

 

You may also like...

5 комментариев

  1. Zithromax Otc Propecia Cost Cvs Pharmacy Locations Pyridium In Internet Worldwide Low Price With Free Shipping How To Use Kamagra Oral Jelly

  2. Stendra Erectile Dysfunction Mail Order Pills 3000mg Amoxicillin A Day Trouver Kamagra France online cialis Keflex Antibiotics For Dogs

  3. Viagra Quale Dosaggio п»їcialis Amoxicillin Side Effects In Children

  4. secure ordering isotretinoin pills in internet Ed Meds Nz Buy Deltasone Prednisone online cialis Mejor Cialis O Viagra

  5. Secure Ordering Isotretinoin With Free Shipping Direct Buy Fluconazole 200 Mg Cialis Pharmacie Andorre cialis Purchasing Doxycycline Levitra Nuova Formulazione

Добавить комментарий

Ваш e-mail не будет опубликован.

Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.
Регистрация не требуется. В качестве логина укажите рабочую почту, в качестве пароля - пароль от компьютера.