Добавить в корзинуПозвонить
Найти в Дзене
OIntelligence

AndroidDev. Введение в activities

Класс Activity является важнейшим компонентом приложения для Android, а способ запуска и объединения действий является фундаментальной частью модели приложения платформы. В отличие от парадигм программирования, в которых приложения запускаются с помощью main() метода, система Android инициирует код в Activity экземпляре, вызывая определенные методы обратного вызова, соответствующие определенным этапам его жизненного цикла. Этот документ знакомит с концепцией действий, а также содержит краткое руководство по работе с ними. Дополнительные сведения о передовых методах разработки архитектуры приложения см. в Руководстве по архитектуре приложений . Концепция activities Мобильное приложение отличается от настольного аналога тем, что взаимодействие пользователя с приложением не всегда начинается в одном и том же месте. Вместо этого путь пользователя часто начинается недетерминировано. Например, если вы открываете приложение электронной почты на главном экране, вы можете увидеть список электро
Оглавление

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

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

Концепция activities

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

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

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

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

Хотя действия работают вместе, чтобы сформировать целостный пользовательский опыт в приложении, каждое действие лишь слабо связано с другими действиями; обычно есть минимальные зависимости между действиями в приложении. На самом деле действия часто запускают действия, принадлежащие другим приложениям. Например, приложение для браузера может запускать действие «Поделиться» приложения для социальных сетей.

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

Настройка manifest

Чтобы ваше приложение могло использовать действия, вы должны объявить действия и некоторые их атрибуты в manifest.

Объявление activity

Чтобы объявить свою activity, откройте файл manifest и добавьте элемент <activity> в качестве элемента дочерний элемент <application> . Например:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

Единственным обязательным атрибутом для этого элемента является android:name , который указывает имя класса activity. Вы также можете добавить атрибуты, определяющие характеристики действий, такие как label, icon или тема пользовательского интерфейса. Дополнительные сведения об этих и других атрибутах см. в справочной документации по элементу <activity>.

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

Объявление intent filters

Intent filters - очень мощная функция платформы Android. Они предоставляют возможность запуска активности на основе не только явного запроса, но и неявного . Например, явный запрос может указать системе «Запустить действие отправки электронной почты в приложении Gmail». Напротив, неявный запрос говорит системе «Запустить экран отправки электронной почты в любом действии, которое может выполнять эту работу». Когда системный пользовательский интерфейс спрашивает пользователя, какое приложение использовать для выполнения задачи, это работает фильтр намерений.

Вы можете воспользоваться этой функцией, объявив атрибут <intent-filter> в элементе <activity> . Определение этого элемента включает элемент <action> и, необязательный элемент <category> и/или элемент <data> . Эти элементы объединяются, чтобы указать тип намерения, на которое может реагировать ваша деятельность. Например, в следующем фрагменте кода показано, как настроить действие, которое отправляет текстовые данные и получает на это запросы от других действий:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

В этом примере элемент <action> указывает, что это действие отправляет данные. Объявление элемента <category> как DEFAULT позволяет activity получать запросы на запуск. Элемент <data> указывает тип данных, которые может отправлять это действие. В следующем фрагменте кода показано, как вызвать действие, описанное выше:

//Kotlin
val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Если вы хотите, чтобы ваше приложение было автономным и не позволяло другим приложениям активировать его действия, вам не нужны никакие другие фильтры намерений. Действия, которые вы не хотите делать доступными для других приложений, не должны иметь фильтров намерений, и вы можете запускать их самостоятельно, используя явные намерения. Дополнительные сведения о том, как ваши действия могут реагировать на намерения, см. в разделе Intents и Intent Filters .

Объявление permissions

Вы можете использовать тег манифеста, чтобы контролировать, какие приложения могут запускать определенное действие. Родительское действие не может запустить дочернее действие, если оба действия не имеют одинаковых разрешений в своем манифесте. Если вы объявляете элемент для родительского действия, каждое дочернее действие должно иметь соответствующий элемент. <activity> <uses-permission> <uses-permission>

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

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

Затем, чтобы иметь возможность вызывать SocialApp, ваше приложение должно соответствовать разрешению, установленному в манифесте SocialApp:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

Дополнительные сведения о разрешениях и безопасности в целом см . в разделе Безопасность и разрешения .

Управление жизненным циклом activity

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

onCreate()

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

Когда onCreate() заканчивается, следующий обратный вызов всегда onStart().

onStart()

При onCreate() выходе действие переходит в состояние «Запущено» и становится видимым для пользователя. Этот обратный вызов содержит то, что составляет окончательную подготовку действия к выходу на передний план и превращению в интерактивное.

onResume( )

Система вызывает этот обратный вызов непосредственно перед тем, как активность начинает взаимодействовать с пользователем. В этот момент действие находится на вершине стека действий и фиксирует все действия, вводимые пользователем. Большая часть основных функций приложения реализована в onResume() методе.

Обратный onPause() вызов всегда следует за onResume().

onPause()

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

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

Вы не должны использовать onPause() для сохранения данных приложения или пользователя, выполнения сетевых вызовов или выполнения транзакций базы данных. Сведения о сохранении данных см. в разделе Сохранение и восстановление состояния activity .

После onPause() завершения выполнения следующим обратным вызовом является либо onStop() или onResume(), в зависимости от того, что происходит после того, как действие переходит в состояние Пауза.

onStop()

Система вызывает, onStop() когда активность больше не видна пользователю. Это может произойти из-за того, что действие уничтожается, начинается новое действие или существующее действие переходит в состояние Возобновлено (Resumed) и перекрывает остановленное действие. Во всех этих случаях остановленная активность больше не видна.

Следующий обратный вызов, который вызывает система, — это либо onRestart(), если действие возвращается для взаимодействия с пользователем, либо onDestroy() если это действие полностью завершается.

onRestart()

Система вызывает этот обратный вызов, когда действие в состоянии Stopped собирается перезапуститься. onRestart() восстанавливает состояние активности с момента ее остановки.

За этим обратным вызовом всегда следует onStart().

onDestroy( )

Система вызывает этот обратный вызов перед уничтожением действия.

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

В этом разделе представлено только введение в эту тему. Более подробное описание жизненного цикла действия и его обратных вызовов см. в разделе Жизненный цикл Activiti .

источник: https://developer.android.com/guide/components/activities/intro-activities

#android developments #android studio #kotlin #activity