Активность, AppCompatActivity, FragmentActivity и ActionBarActivity: когда использовать что?

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

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

Ответ 1

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

Номер

Так что для 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, выходящие далеко за рамки этого конкретного ответа Qaru.

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

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

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

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

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

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

Ответ 2

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

Activity & lt; - FragmentActivity & lt; - AppCompatActivity - ActionBarActivity

"& lt; -" означает наследование здесь. ссылка говорит, что ActionBarActivity устарела, вместо этого используйте AppCompatActivity.

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

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

Ответ 3

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

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

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

Начиная с Android 3.0 (уровень API 11), все действия, которые используют тема по умолчанию имеет панель действий в качестве панели приложения. Тем не менее, панель приложения функции были постепенно добавлены в родной ActionBar над различные выпуски 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.

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

Ответ 4

Для минимального уровня 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, но не ожидайте, что конкретные классы, которые они используют, будут обновлены.

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

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

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

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

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

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

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

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

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

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

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

теперь FragmentActivty

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

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

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

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

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

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

Here

Я упоминаю эти два один,два

Ответ 8

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

Ответ 9

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

Так что активность быстрее, чем у всех & AppCompatActivity - лучший из всех.