it-swarm.com.ru

Activity, AppCompatActivity, FragmentActivity и ActionBarActivity: когда использовать какую?

Я пришел из iOS, где это легко, а вы просто используете UIViewController. Однако в Android все выглядит намного сложнее, с определенными компонентами UIC для определенных уровней API. Я читаю BigNerdRanch для Android (книге примерно 2 года), и они предлагают использовать Activity для размещения моей FragmentActivities. Тем не менее, я думал, что Activity устарела. 

Так что для API уровня 22 (с минимальной поддержкой API уровня 15 или 16), что именно я должен использовать как для размещения компонентов, так и для самих компонентов? Есть ли применение для всех этих, или я должен использовать один или два почти исключительно?

216
Jameson

Я думал, что активность устарела

Нет.

Так что для API уровня 22 (с минимальной поддержкой API уровня 15 или 16), что именно я должен использовать как для размещения компонентов, так и для самих компонентов? Есть ли применение для всех этих, или я должен использовать один или два почти исключительно?

Activity является базовой линией. Каждое действие наследуется от Activity, прямо или косвенно.

FragmentActivity предназначен для использования с обратным портом фрагментов, найденных в библиотеках support-v4 и support-v13. В API Level 11 была добавлена ​​нативная реализация фрагментов, которая ниже предложенных вами значений minSdkVersion. Единственная причина, по которой вам нужно было бы учитывать FragmentActivity, заключается в том, что вы хотите использовать вложенные фрагменты (фрагмент, содержащий другой фрагмент), поскольку это не поддерживалось в собственных фрагментах до уровня API 17.

AppCompatActivity из библиотеки appcompat-v7. Как правило, это предлагает бэкпорт панели действий. Поскольку встроенная панель действий была добавлена ​​в API Level 11, для этого вам не требуется AppCompatActivity. Тем не менее, текущие версии appcompat-v7 также добавляют ограниченный бэкпорт эстетики Material Design с точки зрения панели действий и различных виджетов. Есть плюсы и минусы использования appcompat-v7, выходящие далеко за рамки этого конкретного ответа о переполнении стека.

ActionBarActivity - это старое имя базового действия из appcompat-v7. По разным причинам они хотели сменить имя. Если какая-либо сторонняя библиотека, которую вы используете, настаивает на ActionBarActivity, вы должны предпочесть AppCompatActivity перед ActionBarActivity.

Итак, учитывая ваш minSdkVersion в диапазоне 15-16:

  • Если вы хотите, чтобы внешний вид материала был перенесен, используйте AppCompatActivity

  • Если нет, но вы хотите вложенные фрагменты, используйте FragmentActivity

  • Если нет, используйте Activity

Просто добавив комментарий в качестве примечания: AppCompatActivity расширяет FragmentActivity, поэтому любой, кому необходимо использовать функции FragmentActivity, может использовать AppCompatActivity.

283
CommonsWare

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

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

«<-» означает наследование здесь. ссылка said ActionBarActivity устарела, вместо нее используйте AppCompatActivity.

Таким образом, использование AppCompatActivity всегда является правильным выбором. Различия между ними:

  • Activity является основным.
  • На основе Activity, FragmentActivity предоставляет возможность использовать Fragment.
  • На основе FragmentActivity, AppCompatActivity предоставляет функции для ActionBar.
64
Ted Yu

2018: использовать AppCompatActivity

На момент написания этой статьи (проверьте ссылку, чтобы подтвердить, что она по-прежнему верна), Документация Android рекомендует использовать AppCompatActivity, если вы используете панель приложений. 

Это рациональная данность:

Начиная с Android 3.0 (уровень API 11), все действия, которые используют тема по умолчанию имеет панель действий в качестве панели приложения. Тем не менее, панель приложения функции постепенно добавляются в родную панель действий поверх различные выпуски Android. В результате родной ActionBar ведет себя по-разному в зависимости от того, какая версия системы Android устройства может быть, используя. Напротив, самые последние функции добавляются в Поддержите библиотеку версии панели инструментов, и они доступны на любом устройство, которое может использовать библиотеку поддержки.

По этой причине вы должны использовать класс панели инструментов библиотеки поддержки для реализовать панель приложений вашей деятельности. Использование библиотеки поддержки Панель инструментов помогает гарантировать, что ваше приложение будет иметь согласованное поведение через самый широкий спектр устройств. Например, виджет панели инструментов обеспечивает дизайн материала на устройствах под управлением Android 2.1 (Уровень API 7) или выше, но встроенная панель действий не поддерживает дизайн материала, если устройство не работает под управлением Android 5.0 (уровень API 21) или новее.

Общие указания по добавлению панели инструментов:

  1. Добавить библиотеку поддержки app7 для v7
  2. Расширьте все свои действия AppCompatActivity
  3. В Манифесте объявите, что вы хотите NoActionBar.
  4. Добавьте ToolBar в XML-макет каждого действия.
  5. Получите ToolBar в каждой активности onCreate.

См. инструкции к документации для более подробной информации. Они довольно понятны и полезны.

61
Suragch

Для минимального уровня API 15 вы должны использовать AppCompatActivity. Так, например, ваш MainActivity будет выглядеть так: 

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

Чтобы использовать AppCompatActivity, убедитесь, что у вас есть загруженная библиотека поддержки Google (вы можете проверить это в меню Инструменты -> Android -> Менеджер SDK). Затем просто включите зависимость gradle в файл gradle.build вашего приложения:

compile 'com.Android.support:appcompat-v7:22:2.0'

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

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

48
adao7000

Activity класс является базовым классом. (Оригинал) Поддерживает управление фрагментами (начиная с API 11). Больше не рекомендуется его чистое использование, потому что его специализации намного лучше.

ActionBarActivity была в настоящий момент the заменой на класс Activity, потому что это облегчало обработку ActionBar в приложении.

AppCompatActivity - это the новый путь, потому что ActionBar больше не поощряется, и вы должны вместо этого использовать панель инструментов (это в настоящее время the замена ActionBar). AppCompatActivity наследует от FragmentActivity, поэтому, если вам нужно обработать фрагменты, вы можете (через Fragment Manager). AppCompatActivity предназначена для ЛЮБОГО API, а не только для 16+ (кто это сказал?). Вы можете использовать его, добавив compile 'com.Android.support:appcompat-v7:24:2.0' в свой файл Gradle. Я использую его в API 10, и он отлично работает.

28
Joaquin Iurchuk

Здесь много путаницы, особенно если вы читаете устаревшие источники.

Основным является Activity, который может отображать фрагменты. Вы можете использовать эту комбинацию, если у вас версия Android> 4.

Однако есть также библиотека поддержки, которая включает в себя другие упомянутые вами классы: FragmentActivity, ActionBarActivity и AppCompat. Первоначально они использовались для поддержки фрагментов в версиях Android <4, но на самом деле они также использовались для поддержки функциональности новых версий Android (например, дизайн материала).

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

11
flower_green

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

3
ExpensiveBelly

Если вы говорите о Activity, AppcompactActivity, ActionBarActivity и т.д. И т.д.

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

Все начинается с Context, который является суперклассом для всех этих классов.

Context - абстрактный класс, реализация которого обеспечивается Система Android. Это позволяет получить доступ к ресурсам, специфичным для приложения, и классы, а также вызовы для операций на уровне приложений, таких как запуск деятельности, вещание и прием намерений, и т. д.

Context сопровождается или дополняется ContextWrapper

ContextWrapper - это класс, расширяющий класс Context, который просто делегирует все свои вызовы другому контексту. Может быть разделено на изменить поведение без изменения исходного контекста.

Теперь мы достигаем Activity 

Activity - это класс, который расширяет ContextThemeWrapper, то есть единственная, сфокусированная вещь, которую может сделать пользователь. Почти все виды деятельности взаимодействовать с пользователем, поэтому класс Activity позаботится о создании окно для вас

Ниже классы ограничены в расширении, но они внутренне расширяются по своему потомку и обеспечивают поддержку определенных API 

SupportActivity - это класс, расширяющий Activity, который является базовым классом для объединения функций совместимости.

BaseFragmentActivityApi14 - это класс, который расширяет SupportActivity Это базовый класс Это ограниченный класс, но он расширяется на BaseFragmentActivityApi16 для поддержки функциональности V14 

BaseFragmentActivityApi16 - это класс, который расширяет BaseFragmentActivityApi14, который является базовым классом для {@code FragmentActivity}, чтобы можно было использовать API v16. Но это также ограниченный класс, но он расширен FragmentActivity для поддержки функциональность V16.

сейчас FragmentActivty

FragmentActivity - это класс, который расширяет BaseFragmentActivityApi16 и который хочет использовать поддержку на основе API фрагментов и загрузчиков.

При использовании этого класса в отличие от встроенной поддержки фрагментов и загрузчика новой платформы вы должны использовать методы getSupportFragmentManager() и getSupportLoaderManager() соответственно для доступа к этим функциям.

ActionBarActivity является частью библиотеки поддержки. Библиотеки поддержки используются для предоставления новых функций на старых платформах. За Пример ActionBar был представлен в API 11 и является частью Активность по умолчанию (в зависимости от темы на самом деле). По сравнению на старых платформах нет ActionBar. Так что поддержка библиотека добавляет дочерний класс Activity (ActionBarActivity), который предоставляет функциональность ActionBar's и пользовательский интерфейс

В 2015 году ActionBarActivity устарело в редакции 22.1.0 библиотеки поддержки. Вместо нее следует использовать AppCompatActivity.

AppcompactActivity - это класс, который расширяет FragmentActivity, который является базовым классом для действий, использующих функции панели действий библиотеки поддержки.

Вы можете добавить ActionBar к своей деятельности при работе на уровне API 7 или выше, расширив этот класс для своей деятельности и установив тему действия на Theme.AppCompat или похожую тему.

 Here

Я называю эти два один , два

3
farhana

AppCompatActivity расширяет FragmentActivity расширяет BaseFragmentActivityApi16 расширяет BaseFragmentActivityApi14 расширяет SupportActivity расширяет активность

Таким образом, Activity быстрее всех, а AppCompatActivity лучше всех.

0
Ahamadullah Saikat