Активность, AppCompatActivity, FragmentActivity и ActionBarActivity: когда использовать какие?
Я иду из iOS, где это легко, и вы просто используете UIViewController. Однако в Android все кажется намного сложнее, с определенными UIComponents для конкретных уровней API. Я читаю BigNerdRanch для Android (книга примерно 2 года), и они предлагают мне использовать Activity
работает FragmentActivities
. Однако я думал .
Итак, для уровня API 22 (с минимальной поддержкой уровня API 15 или 16), что именно я должен использовать для размещения компоненты, а для самих компонентов? Есть ли применение для всех этих, или я должен использовать один или два почти исключительно?
9 ответов:
я думал, что активность была отменена
нет.
Итак, для уровня API 22 (с минимальной поддержкой уровня API 15 или 16), что именно я должен использовать как для размещения компонентов, так и для самих компонентов? Есть ли применение для всех этих, или я должен использовать один или два почти исключительно?
Activity
является базовой. Каждое действие наследуется отActivity
, непосредственно или косвенно.
FragmentActivity
предназначен для использования с обратным портом фрагментов, найденных вsupport-v4
иsupport-v13
библиотеки. Собственная реализация фрагментов была добавлена в уровень API 11, который ниже, чем ваш предлагаемыйminSdkVersion
значения. Единственная причина, по которой вам нужно будет рассмотретьFragmentActivity
в частности, если вы хотите использовать вложенные фрагменты (фрагмент, содержащий другой фрагмент), так как это не поддерживалось в собственных фрагментах до уровня API 17.
AppCompatActivity
отappcompat-v7
библиотека. В основном, это предлагает задний порт панели действий. Поскольку собственная панель действий была добавлена в API Level 11, вам не нужноAppCompatActivity
для этого. Однако, текущие версииappcompat-v7
также добавьте ограниченный задний порт эстетического дизайна материала, с точки зрения панели действий и различных виджетов. Есть плюсы и минусы использованияappcompat-v7
, далеко за пределами этого конкретного ответа переполнения стека.
ActionBarActivity
- это старое название базовой активности отappcompat-v7
. По разным причинам они хотели изменить название. Если только какая-то сторонняя библиотека, которую вы используете, не настаивает наActionBarActivity
, вы должны предпочестьAppCompatActivity
overActionBarActivity
.Итак, беря во внимание
minSdkVersion
в диапазоне 15-16:
если вы хотите backported материальный взгляд конструкции, то используйте
AppCompatActivity
если нет, но вы хотите вложенные фрагменты, используйте
FragmentActivity
если нет, используйте
Activity
просто добавление из комментария как Примечание: AppCompatActivity расширяет FragmentActivity, поэтому любой, кому нужно использовать функции FragmentActivity, может использовать AppCompatActivity.
Activity
Это базовый класс всех других видов деятельности, я не думаю, что он будет устаревшим. Отношения между ними таковы:
Activity
FragmentActivity AppCompatActivity ActionBarActivity'ссылка сказал
ActionBarActivity
устарело, используйте .так что в принципе, используя
AppCompatActivity
- это всегда правильный выбор. Различия между ними:
Activity
основной один.- на основе
Activity
,FragmentActivity
предоставляет возможность использоватьFragment
.- на основе
FragmentActivity
,AppCompatActivity
предоставляет возможности дляActionBar
.
2018: использовать
AppCompatActivity
на момент написания этой статьи (проверьте ссылку, чтобы подтвердить, что она по-прежнему верна),Документация Для Android рекомендует использовать
AppCompatActivity
Если вы используете панель приложений.это рациональная данность:
начиная с Android 3.0 (уровень API 11), все виды деятельности, которые используют тема по умолчанию имеет панель действий в качестве панели приложений. Тем не менее, панель приложений функции постепенно были добавлены в родную панель действий свыше различных версий Android. В результате собственная панель действий ведет себя по-разному в зависимости от версии системы Android устройстве может быть использование. В отличие от этого, самые последние функции добавляются в поддержка версии библиотеки, панели инструментов, и они доступны на любом устройство, которое может использовать библиотеку поддержки.
по этой причине, вы должны использовать класс инструментов поддержки библиотеки реализуйте панели приложений своей деятельности. Использование библиотеки поддержки панель инструментов позволяет гарантировать, что ваше приложение будет одинаково по всему самому широкому спектру устройств. Например, виджет панель инструментов обеспечивает опыт проектирования материалов на устройствах под управлением Android 2.1 (Уровень API 7) или более поздней версии, но встроенная панель действий не поддерживает материал дизайн, если устройство не работает под управлением Android 5.0 (уровень API 21) или позже.
общие направления для добавления панели инструментов
- добавить поддержку V7 appcompat библиотека
- сделать все ваши действия,
AppCompatActivity
- в Манифесте объявите, что вы хотите
NoActionBar
.- добавить
ToolBar
к XML-макету каждого действия.- скачать
ToolBar
в каждом действииonCreate
.посмотреть направления документации для более подробной информации. Они вполне понятны и полезны.
для минимального уровня API 15, вы хотите использовать
AppCompatActivity
. Так, например,MainActivity
будет выглядеть так:public class MainActivity extends AppCompatActivity { .... .... }
использовать
AppCompatActivity
, убедитесь, что вы загрузили библиотеку поддержки Google (вы можете проверить это в своих инструментах -> Android -> SDK manager). Затем просто включите зависимость gradle в gradle вашего приложения.файл build:compile 'com.android.support:appcompat-v7:22:2.0'
вы можете использовать этот
AppCompat
как ваша главнаяActivity
, который затем может быть использован для запуска осколков или других Деятельности (это зависит от того, какое приложение вы создаете).книга Бигнердранча-хороший ресурс, но да, она устарела. Прочитайте его для получения общей информации о том, как работает Android, но не ожидайте, что конкретные классы, которые они используют, будут обновлены.
Activity
класс является базовым классом. (Оригинал) он поддерживает управление фрагментами (начиная с API 11). Больше не рекомендуется его чистое использование, потому что его специализации намного лучше.
ActionBarActivity
в момент the замена класса Activity, потому что он легко справляется с панелью действий в приложении.
AppCompatActivity
и the новый способ пойти, потому что панель действий больше не поощряется, и вы должны использовать панель инструментов вместо этого (это в настоящее время the замена ActionBar). AppCompatActivity наследует от FragmentActivity, поэтому, если вам нужно обрабатывать фрагменты, вы можете (через Диспетчер фрагментов). AppCompatActivity для любого API, а не только 16+ (Кто это сказал?). Вы можете использовать его, добавивcompile 'com.android.support:appcompat-v7:24:2.0'
в вашем файле Gradle. Я использую его в API 10, и он отлично работает.
есть много путаницы, особенно если Вы читаете устаревшие источники.
основной из них
Activity
, который может показать фрагменты. Вы можете использовать эту комбинацию, если вы находитесь на Android версии > 4.однако, есть также библиотека поддержки, которая включает в себя другие классы, которые вы упомянули:
FragmentActivity
,ActionBarActivity
иAppCompat
. Первоначально они использовались для поддержки фрагментов на Android версиипоследний
AppCompat
, остальные 2 старше. Стратегия, которую я использую, - это всегда использоватьAppCompat
, Так что приложение будет готово в случае backports из будущих версий Android.
так как имя, скорее всего, изменится в будущих версиях Android (в настоящее время последней является
AppCompatActivity
но это, вероятно, изменится в какой-то момент), я считаю, что хорошо иметь классActivity
что расширяетAppCompatActivity
и тогда все ваши действия исходят от этого. Если завтра, они меняют имя наAppCompatActivity2
например, вам придется изменить его только в одном месте.
если вы говорите о
Activity
,AppcompactActivity
,ActionBarActivity
и т. д. и т. п..нам нужно поговорить о базовых классах, которые они расширяют, Сначала мы должны понять иерархию суперклассов.
все вещи запускаются из контекста, который является суперклассом для всех этих классов.
контекст является абстрактным классом, реализация которого обеспечивается Системы Android. Это позволяет получить доступ к ресурсам конкретного приложения и классы, а также восходящие вызовы для операций уровня приложения, таких как начав деятельность, предоставление и прием намерений и т. д.
Context
сопровождается или продленContextWrapper
The ContextWrapper - это класс, который распространяется контекст класс, просто делегирует все свои призывы другому Контекст. Может быть разделен на подклассы Измените поведение без изменения исходного контекста.
теперь мы доходим до
Activity
The активность - это класс, который расширяет ContextThemeWrapper это a единственная, сфокусированная вещь, которую может сделать пользователь. Почти все виды деятельности взаимодействие с пользователем, поэтому класс Activity заботится о создании окно для вас
ниже Классы ограничены в расширении, но они расширяются их потомком внутренне и обеспечивают поддержку определенного Api
The SupportActivity - это класс, который расширяет деятельность, которая является базовым классом для создания совместно функциональность совместимости
The BaseFragmentActivityApi14 - это класс, который расширяет SupportActivity то есть базовый класс это ограниченный класс, но он расширяется от BaseFragmentActivityApi16 для поддержки функции V14
в BaseFragmentActivityApi16 - это класс, который расширяет BaseFragmentActivityApi14 это базовый класс для {@code FragmentActivity} чтобы иметь возможность использовать V16 под API-интерфейсы. Но это также ограниченный класс, но он расширяется с помощью FragmentActivity для поддержки функциональность V16 под.
теперь FragmentActivty
The FragmentActivity - это класс, который расширяет BaseFragmentActivityApi16 и что хочет использовать поддержку на основе API фрагментов и загрузчиков.
при использовании этого класса в отличие от встроенной поддержки фрагмента и загрузчика новой платформы, вы должны использовать
getSupportFragmentManager()
иgetSupportLoaderManager()
методы соответственно для доступа к тем особенности.ActionBarActivity является частью библиотеки поддержки. Библиотеки поддержки используются для предоставления новых функций на старых платформах. Для например,ActionBar был введен в API 11 и является частью Действие по умолчанию (в зависимости от темы на самом деле). В отличие от нет никакого ActionBar на старых платформах. Так что поддержка библиотека добавляет дочерний класс активности (ActionBarActivity), что обеспечивает в верхней панели функциональность и пользовательский интерфейс
в 2015 году ActionBarActivity является устаревшим в редакции 22.1.0 библиотеки поддержки. AppCompatActivity должен использоваться вместо этого.
The AppcompactActivity - это класс, который расширяет FragmentActivity это базовый класс для действий, которые используют поддержка функций панели действий библиотеки.
вы можете добавить ActionBar для вашей активности при запуске на уровне API 7 или выше, расширив этот класс для вашей активности и установив тему активности в
Theme.AppCompat
или аналогичная тема