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


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

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

9 199

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 over ActionBarActivity.

Итак, беря во внимание 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) или позже.

общие направления для добавления панели инструментов

  1. добавить поддержку V7 appcompat библиотека
  2. сделать все ваши действия,AppCompatActivity
  3. в Манифесте объявите, что вы хотите NoActionBar.
  4. добавить ToolBar к XML-макету каждого действия.
  5. скачать 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 или аналогичная тема

Here

Я отсылаю этих двоих один,два

AppCompatActivity выходит FragmentActivity выходит BaseFragmentActivityApi16 выходит BaseFragmentActivityApi14 выходит SupportActivity выходит активность

Так активность быстрее, чем все & AppCompatActivity это лучше всего.