扩展LifecycleActivity、Activity、ActionbarActivity和AppCompactActivity之间的区别是什么?

70
在Android中,扩展Lifecycler Activity、Activity、ActionBarActivity和AppCompactActivity的主要区别是什么?这些类在使用方面有何不同?

2
这里有详细的解释:https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html - donfuxx
在这里阅读更多相关信息:https://dev59.com/Z37aa4cB1Zd3GeqPtK35 ActionBarActivity 扩展了 FragmentActivity 并添加了对 appcompat 动作栏后向兼容的支持。 - user3729451
5个回答

83
  • 继承ActionBarActivity可以在API等级大于或等于7的每个级别上获得ActionBar的功能。
  • 通过继承Activity,您可以避免向项目添加其他项目/库,但是在API级别低于11的级别上,您将缺少ActionBar

编辑:更多细节:

ActionBarActivitySupport Library 的一部分。支持库用于在旧平台上提供新功能。例如,ActionBar 在 API 11 中引入,并且默认情况下是 Activity 的一部分(实际上取决于主题)。相比之下,在旧平台上没有 ActionBar。因此,支持库添加了一个 Activity 的子类(ActionBarActivity),它提供了 ActionBar 的功能和用户界面。

编辑2:2015年4月更新 - 看起来在支持库的 revision 22.1.0中已经弃用了 ActionBarActivity。应改用 AppCompatActivity

编辑3: 2017年8月更新 - LifecycleActivity 是一个LifecycleOwner,但是:

“由于架构组件处于alpha阶段,Fragment和AppCompatActivity类不能实现它(因为我们不能从稳定的组件向不稳定的API添加依赖)。在Lifecycle稳定之前,提供了LifecycleActivity和LifecycleFragment类以方便使用。Lifecycles项目发布后,支持库片段和活动将实现LifecycleOwner接口;此时LifecycleActivity和LifecycleFragment将被弃用。”

(摘自架构组件指南)

2
在 API 等级低于 7 的情况下,您将缺少 ActionBar。 - m121212
@m121212 ActionBar是在API级别11中引入的。因此,通过扩展Activity,您只能在运行Android 3.0 Honeycomb(即API级别11)及以上版本的设备上使用它。 - stan0
4
赞成这个回答。当然有足够的文档可供阅读,我们有时需要的是对事物的简明定义。 - Josh
@stan0请更新您的回答并添加Lifecycle Activity :) - Umer Kiani
@UmerKiani 我不确定这是否是一个好的方法来构建一个问答系统,因为问题中可以包含大量内容,这将使其看起来像一篇文章或文档 - 可能超出了 SO 的范围? - stan0
显示剩余2条评论

7

如果您仔细观察,您将会看到这个。

public class ActionBarActivity extends FragmentActivity
implements ActionBarDrawerToggle.DelegateProvider TaskStackBuilder.SupportParentable

这里您可以了解FragmentActivity: http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html

Activity和FragmentActivity之间的区别: Activity和FragmentActivity之间的区别

此外,有一些新的主题可用于为操作栏设置样式... https://developer.android.com/training/basics/actionbar/styling.html

Actionbar是在API级别11中引入的。com.android.support:appcompat-v7:+是一个支持库,允许您在运行Android 3.0或更低版本的设备上在应用程序中拥有ActionBar。因此,如果您需要处理api级别11以下的actionbar,则您的Activity需要扩展ActionBarActivity。

如果您的目标api级别为11及以上,则无需扩展ActionBarActivity并引用AppCompat。您只需扩展Activity即可默认拥有actionbar。

Android Studio默认项目会自动将其包含在依赖项中,并扩展ActionbarActivity以使用它。


4

ActionBarActivitySupportActionBarActivity 拥有额外的方法和属性,这些在普通的 Activity 中没有。例如,在 ActionBarActivity 中有添加标签的方法,而在普通的 Activity 中则没有。

主要的区别在于普通的 Activity 上没有 ActionBar


如果不想使用操作栏怎么办?它是否比简单活动有更好的性能提升,还是只是因为操作栏而更好使用? - Umer Kiani
我不知道ActionBarActivity与非Activity相比是否有性能提升。 - danny117
谢谢。我仍然有点困惑于在我的未来应用程序中使用什么,以及什么更受推荐。 - Umer Kiani
如果您不想使用ActionBarActivity,您应该使用FragmentActivity...请查看我的帖子,它描述了ActionBarActivity背后的逻辑。 - vanste25
不用担心该用什么,将动作栏添加到现有应用程序非常简单。也许只需要10分钟,您只需更改代码以扩展ActionBarActivity,然后修复导入和其他细微错误即可。 - danny117

1

您正在使用Android支持库。当您使用Actionbaractivity时,支持库的使用使您的应用程序能够支持尽可能多的设备。支持库为您的应用程序提供了向后兼容性的功能。Actionbaractivity为您提供了多个功能,如Actionbardrawer toggle等。还有更多的支持库可用。请查看此链接...并分享给您的朋友们...https://developer.android.com/tools/support-library/index.html


1

ActionBarActivity只是拥有更多的支持库和更好的使用api 11中可用的新主题。

“在其最基本的形式中,操作栏显示活动的标题和应用程序图标在左侧。即使在这种简单的形式中,操作栏对于所有活动都很有用,可以向用户提供关于他们所在位置的信息,并为您的应用程序保持一致的身份。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接