我来自iOS,它很简单,你只需要使用UIViewController。然而,在Android中,事情似乎要复杂得多,特定的API级别有特定的uiccomponent。我正在阅读BigNerdRanch for Android(这本书大约有2年的历史了),他们建议我使用Activity来托管我的FragmentActivities。然而,我认为活动是不赞成的。

那么对于API级别22(至少支持API级别15或16),我究竟应该使用什么来托管组件,以及组件本身呢?所有这些都有用处吗,还是我应该只使用其中一两个?


当前回答

我以为Activity被弃用了

No.

那么对于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有优点和缺点,这远远超出了这个特定的Stack Overflow答案的范围。

ActionBarActivity是appcompat-v7中基本活动的旧名称。由于种种原因,他们想要改名。除非你使用的第三方库坚持使用ActionBarActivity,否则你应该更喜欢AppCompatActivity而不是ActionBarActivity。

因此,给定你的minSdkVersion在15-16范围内:

如果你想要反向移植的材质设计外观,请使用AppCompatActivity 如果不是,但你想要嵌套的片段,使用FragmentActivity 如果没有,使用Activity

AppCompatActivity扩展FragmentActivity,所以任何需要使用FragmentActivity特性的人都可以使用AppCompatActivity。

其他回答

这里有很多困惑,特别是如果你阅读了过时的资料。

最基本的是Activity,它可以显示片段。如果你在Android版本> 4上,你可以使用这个组合。

然而,也有一个支持库,它包含了你提到的其他类:FragmentActivity, ActionBarActivity和AppCompat。最初它们用于支持Android版本< 4的片段,但实际上它们也用于移植新版本Android的功能(例如材质设计)。

最新的一款是AppCompat,其他两款都比较老。我使用的策略是始终使用AppCompat,这样应用程序就可以从未来的Android版本中向后移植。

我以为Activity被弃用了

No.

那么对于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有优点和缺点,这远远超出了这个特定的Stack Overflow答案的范围。

ActionBarActivity是appcompat-v7中基本活动的旧名称。由于种种原因,他们想要改名。除非你使用的第三方库坚持使用ActionBarActivity,否则你应该更喜欢AppCompatActivity而不是ActionBarActivity。

因此,给定你的minSdkVersion在15-16范围内:

如果你想要反向移植的材质设计外观,请使用AppCompatActivity 如果不是,但你想要嵌套的片段,使用FragmentActivity 如果没有,使用Activity

AppCompatActivity扩展FragmentActivity,所以任何需要使用FragmentActivity特性的人都可以使用AppCompatActivity。

由于名称很可能会在未来的Android版本中发生变化(目前最新的是AppCompatActivity,但它可能会在某个时候发生变化),我相信有一个扩展AppCompatActivity的类Activity是一件好事,然后你所有的活动都从这个类Activity扩展。例如,如果明天他们将名称更改为AppCompatActivity2,你将不得不在一个地方更改它。

对于最低API级别为15的情况,您需要使用AppCompatActivity。例如,你的MainActivity看起来是这样的:

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

要使用AppCompatActivity,请确保您下载了谷歌支持库(您可以在您的Tools -> Android -> SDK管理器中检查这一点)。然后在你的应用的gradle中包含gradle依赖。构建文件:

compile 'com.android.support:appcompat-v7:22:2.0'

你可以使用这个AppCompat作为你的主活动,然后它可以用来启动Fragments或其他活动(这取决于你正在构建的应用类型)。

《BigNerdRanch》这本书是一个很好的资源,但是是的,它已经过时了。阅读它可以获得关于Android如何工作的一般信息,但不要期望他们使用的特定类是最新的。

Activity是所有其他Activity的基类,我不认为它会被弃用。它们之间的关系是:

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

'<-'在这里表示继承。参考说ActionBarActivity已弃用,改用AppCompatActivity。

所以基本上,使用AppCompatActivity总是正确的选择。它们之间的区别是:

活动是最基本的。 基于Activity, FragmentActivity提供了使用Fragment的能力。 基于FragmentActivity, AppCompatActivity为ActionBar提供了一些特性。