【问题标题】:Differences between FrangmentTransaction and IntentFrangmentTransaction 和 Intent 的区别
【发布时间】:2018-01-08 19:06:48
【问题描述】:

正如 Udacity 所教导的,通常应该使用意图来开始一项新活动(可能会显示新的/不同的信息)。但是,对于我目前正在进行的项目,我一直在使用 FragmentTransaction 来显示应用程序的不同区域。我认为这会导致 apk 更小(b/c 没有用于不同活动的 java/xml 文件),但是我没有考虑到任何好处(这表明我应该使用意图而不是 FragmentTransactions)?

【问题讨论】:

    标签: android performance android-layout android-intent fragmenttransaction


    【解决方案1】:

    在我看来,这取决于您使用什么。 Intents 和 FragmentTransaction 都有它们的好处,并且在某些情况下更多有用,而在其他情况下则更少。我认为这通常取决于你想用 FragmentTransactions 做什么。 Intent 的一大好处是可以直接共享数据的 Extra Bundle,在 FragmentTransaction 中,数据之间的通信更加复杂。我认为您应该自己尝试一下,然后再决定在某些情况下哪个有用。

    【讨论】:

    • 在进行片段事务时,您不能在使用 FragmentTransaction 类中的 replace 方法切换片段之前通过 fragment.setArguments(Bundle) 方法提供捆绑包吗?
    • @JoelRobinson-Johnson 是的,你可以,如果活动实例状态被保存和恢复,那将被恢复。这就是为什么你必须始终有一个零参数的构造函数,并且以其他方式(在构造函数中等)将任何参数传递给片段。
    【解决方案2】:

    APK 大小差异将是微不足道的。 XML 和类文件在归档到 APK 时会被压缩。反正它们都比较小。

    创建片段是为了提供一种在不同屏幕/设备外形尺寸之间共享屏幕 UI 组件的方法。

    例如,假设有一个销售点应用,其中一个部分显示订单行项目,一个部分显示可添加到订单中的库存,一个部分显示订单的总金额。如果您的应用需要同时在平板电脑和手机因素上运行,您可以在平板电脑的屏幕上包含所有三个组件,但只在手机上包含订单项和总计。但是,您可以在两种形式因素之间重复使用行项目和总片段。您也可以重复使用库存片段,但以不同的方式组成:在平板电脑上,它与订单项和总计一起在屏幕上组成,但在手机上,它在单独的屏幕上组成(嵌入在不同的活动中)。

    无论如何,这就是梦想。恕我直言,让一个具有复杂生命周期(片段)的组件存在于另一个具有复杂生命周期(活动)的组件中的复杂性使得这成为一个值得怀疑的前景。如果你让你的片段完全独立,不知道持有活动或其他片段,并且让活动不知道片段的细节,它可以工作。否则你会获得很多“乐趣”。

    具有讽刺意味的是,在屏幕上与其他片段组成的片段通常不是独立的。在我上面的示例中,订单总额片段需要知道订单行项目。这意味着您需要为这两个片段创建一个服务,以便在不直接相互交流的情况下传达此信息。

    【讨论】:

    • 我一直认为操作系统会神奇地连接片段和活动,以便它们的生命周期最终会变得同步。一个片段在膨胀后究竟如何不知道活动生命周期?
    • 我认为它们“最终会同步”,但是当您尝试编写正确的代码时,这种保证并没有多大帮助。片段如何知道活动生命周期?当片段的onResume() 被调用时,有活动的吗?如果您找到记录在案的答案,请告诉我。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2014-05-21
    • 2017-01-28
    • 2018-10-21
    • 2023-04-01
    • 1970-01-01
    • 2013-08-07
    • 2011-10-20
    相关资源
    最近更新 更多