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

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

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

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

Нет.

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

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

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

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

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

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

  • Если вы хотите, чтобы внешний вид Materialport выглядел, используйте AppCompatActivity

  • Если нет, но вы хотите вложенные fragmentы, используйте FragmentActivity

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

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

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

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

‘<-' означает наследование здесь. Ссылка, указанная в ActionBarActivity , устарела, вместо этого используйте AppCompatActivity .

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

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

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

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

Это разумно:

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

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

Общие указания по добавлению ToolBar:

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

Подробнее см. В инструкциях по документации . Они совершенно ясны и полезны.

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

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

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

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

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

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

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

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

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

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

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

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

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

Контекст – это абстрактный class, реализация которого обеспечивается системой Android. Он позволяет получать доступ к ресурсам и classам приложений, а также переадресации для операций на уровне приложений, таких как запуск, трансляция и получение намерений и т. Д.

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

ContextWrapper – это class, который расширяет class Context, который просто делегирует все его вызовы другому Контексту. Может быть подclassифицировано для изменения поведения без изменения исходного контекста.

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

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

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

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

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

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

теперь FragmentActivty

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

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

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

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

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

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

Вот

Я отношу эти два, два

AppCompatActivity расширяет FragmentActivity расширяет BaseFragmentActivityApi16 расширяет BaseFragmentActivityApi14 расширяет поддержкуActivity extends Activity

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

  • android.content.ActivityNotFoundException:
  • Ошибки, управляющие жизненным циклом UnityPlayer в приложении для собственных приложений Android
  • Как управлять «startActivityForResult» на Android?
  • Android: как заставить активность возвращать результаты деятельности, которая его вызывает?
  • Заставка экрана при загрузке URL-адреса в веб-виде в приложении для Android
  • Попытка UNINSTALL_SHORTCUT, но ярлык не исчезнет
  • Как возобновить Android-активность программно из фона
  • Как уведомить о намерениях уведомления, а не делать новые намерения?
  • Новый Intent () запускает новый экземпляр с Android: launchMode = "singleTop"
  • Начать работу внутри onReceive BroadcastReceiver
  • onActivityResult не вызывается в fragmentе
  • Давайте будем гением компьютера.