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

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

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

9 ответов


я думал, что активность была отменена

нет.

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

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

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

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

ActionBarActivity - старое название базовой активности из appcompat-v7. По разным причинам они хотели сменить название. Если какая-то сторонняя библиотека, которую вы используете, не настаивает на ActionBarActivity, вы должны предпочесть AppCompatActivity над 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), все действия, которые используют тема по умолчанию имеет ActionBar в качестве панели приложений. Тем не менее, App bar функции постепенно добавляются в родную ActionBar свыше различных версий Android. В результате собственный ActionBar ведет себя по-разному в зависимости от версии системы 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 в момент на замена на класс активности, потому что это позволило легко обрабатывать ActionBar в приложении.

AppCompatActivity и на новый путь, потому что в ActionBar не рекомендуется, и вы должны использовать панель инструментов (это в настоящее время на замена 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 etc etc..

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

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

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

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

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

теперь мы доходим до Activity

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

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

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

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

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

теперь FragmentActivty

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

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

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

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

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

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

Here

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


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

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