活动和片段之间有啥区别?

Posted

技术标签:

【中文标题】活动和片段之间有啥区别?【英文标题】:What are the differences between activity and fragment?活动和片段之间有什么区别? 【发布时间】:2014-11-07 11:32:33 【问题描述】:

根据我的研究,backstack 的概念及其存在方式存在显着差异:

活动

activity 放置到activitiesbackstack 时,用户 只需按 back 即可导航回上一个活动 按钮。

Activity可以独立存在。

片段

fragment 被放置到活动中时,我们必须请求 在fragment 期间调用addToBackstack() 来保存实例 transaction

Fragment 必须住在activity

还有其他区别吗?

【问题讨论】:

片段不需要在清单中声明。我们有嵌套的片段,但我们不能有嵌套的活动 相关帖子 - android - I need some clarifications of fragments vs activities and views & Dilemma: when to use Fragments vs Activities: 【参考方案1】:

这是两个完全不同的东西:

Activity 是一个提供屏幕的应用程序组件,用户可以通过该屏幕进行交互以执行某些操作。更多细节: https://developer.android.com/guide/components/activities/intro-activities

而 Fragment 表示 Activity 中的行为或用户界面的一部分。 https://developer.android.com/guide/fragments

【讨论】:

【参考方案2】:

Activity和Fragment的主要区别

    Activity 是一个应用程序组件,它提供用户可以交互的用户界面。 片段是 Activity 的一部分,它为该 Activity 贡献自己的 UI。 对于平板电脑或移动设备处于横向模式,则使用片段我们可以显示两个列表,例如显示状态名称的唯一列表,其他列表将显示单个活动中的状态描述,但使用活动我们不能做同样的事情. Activity 不依赖于 fragment.but Fragment依赖于Activity,不能独立存在。 如果不在 Activity 中使用片段,我们将无法创建多窗格 UI。但 在单个活动中使用多个片段,我们可以创建多窗格 UI。 如果我们只使用 Activity 创建项目,那么它很难管理,但是 如果我们使用片段,那么项目结构会很好,我们可以轻松处理它。 一个活动可能包含 0 个或多个片段。一个片段可以是 在多个活动中重复使用, 因此它就像活动中的可重用组件一样。 生命周期方法由操作系统托管。活动有自己的生命周期。片段中的生命周期方法通过托管活动来托管。 对于 Activity,我们只需要在 Manifest 中提及,但对于 Fragment 则不需要 必填。 活动不是轻量级的。片段是 lite 重量。

【讨论】:

很好的解释。 有人可以详细说明#10。与活动相比,片段轻量级的原因是什么? #7 没有意义:-\ @t3chb0t 他们每个人都有自己的生命周期事件。对于#9,片段怎么可能不使用内存?那里一定有脚印吧? Activity 不是轻量级的,因为 --> 它是一个上帝的对象。如果您使用 AppCompatActivity,它会从 FragmentActivity、Activity、ContextThemeWrapper、ContextWrapper 和 Context 继承所有内容。虽然 Fragment 没有扩展任何类【参考方案3】:

根据 android 开发者文档,片段和活动在其生命周期中的区别。

文档链接http://developer.android.com/guide/components/fragments.html#Lifecycle

Activity 和 Fragment 在生命周期中最显着的区别在于它是如何存储在其各自的后台堆栈中的。默认情况下,活动在停止时被放置到由系统管理的活动的后退堆栈中(以便用户可以使用后退按钮导航回它,如任务和后退堆栈中所述)。但是,仅当您在删除片段的事务期间通过调用 addToBackStack() 显式请求保存实例时,才会将片段放入由主机 Activity 管理的后退堆栈中。

否则,管理片段生命周期与管理活动生命周期非常相似。因此,管理活动生命周期的相同做法也适用于片段。不过,您还需要了解活动的生命周期如何影响片段的生命周期。

& 对于多窗格布局,您必须使用 fragment,而这是 activity 无法实现的。

【讨论】:

【参考方案4】:

Activity 是应用程序的 UI,用户可以通过它进行交互和 Fragment是Activity的一部分,是Activity内部的子Activity 它有自己的生命周期,与活动生命周期平行。

Activity LifeCycle                           Fragment LifeCycle
onCreate()                                     onAttach()
    |                                              |
onStart()______onRestart()                     onCreate()
    |             |                                |
onResume()        |                            onCreateView()
    |             |                                |
onPause()         |                            onActivityCreated()
    |             |                                |
onStop()__________|                             onStart()
    |                                              |
onDestroy()                                    onResume()
                                                   |
                                                onPause()
                                                   |
                                                onStop()
                                                   |
                                              onDestroyView()
                                                   |
                                               onDestroy()
                                                   |
                                               onDetach()

【讨论】:

【参考方案5】:

活动 1. Activity 是 Android 平台上应用程序的基本构建块之一。它们充当用户与应用程序交互的入口点 也是用户在应用内或应用之间导航的核心 2. 生命周期方法由操作系统托管。 3.Lifecycle of activity

片段 1. Fragment 表示 Activity 中的一种行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格 UI 并在多个活动中重用一个片段。您可以将片段视为 Activity 的模块化部分,它有自己的生命周期,接收自己的输入事件,并且您可以在 Activity 运行时添加或删除它。 2. 生命周期方法是hosted by 是hosted by 举办活动。 3.Lifecycle of a fragment

【讨论】:

以上是关于活动和片段之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Activityname.this() 和 this 之间有啥区别吗?

setContentView 和 LayoutInflater 有啥区别?

这两个代码片段有啥区别?

这两个片段有啥区别?

“nvprof”的结果中的“GPU 活动”和“API 调用”有啥区别?

返回函数调用与仅在递归期间再次调用函数有啥区别?