片段和片段活动是否比活动本身更快?
如果我不需要在片段中加载我的活动,那么我应该使用片段活动和片段取代活动吗?
我之所以问这个问题是因为多年来我一直在使用活动,但Facebook SDK和Google Maps 2.0强制我使用片段,现在我想知道它们是否本质上“更好”,与其他实现方式相比。
如果这被认为“没有建设性”,或者“太开放了”,那么显然答案是“不是”。但如果有一些谷歌开发人员文档或博客涉及到这个问题,那么我希望能知道它。
片段和片段活动是否比活动本身更快?
如果我不需要在片段中加载我的活动,那么我应该使用片段活动和片段取代活动吗?
我之所以问这个问题是因为多年来我一直在使用活动,但Facebook SDK和Google Maps 2.0强制我使用片段,现在我想知道它们是否本质上“更好”,与其他实现方式相比。
如果这被认为“没有建设性”,或者“太开放了”,那么显然答案是“不是”。但如果有一些谷歌开发人员文档或博客涉及到这个问题,那么我希望能知道它。
在我的上一个应用程序中,我成为Fragments的信奉者。无论它们是否计算速度更快,因为您可以基本瞬间地交换它们,包括完全支持后退堆栈,如果您做得正确(在事务上调用addToBackStack()或非常类似的内容),它们使人感觉更快。
现在,我对所有要快速浏览的导航使用Fragments/Fragment活动,例如单击行以获取更多详细信息。只有当我想要执行基本不同的操作并需要干净的工作空间时,才启动新的活动。例如,我通常有一个LoginActivity,专门处理登录/注册,至少还有一个是应用程序的核心部分。
但Fragments的基本好处仍然是它们的灵活性。我可以在其他片段之上显示片段,在不同的屏幕尺寸上重新排列它们等等。但还有很多其他好处。只是需要一段时间才能自然地感受到它们(就像最初的Activities一样)。
一个警告是,我总是后悔将Fragments嵌入到我的布局中。我不能在这里脱口而出地给出确切的理由,但本质上你只是失去了一些灵活性。相反,我为每个Fragment构建一个普通的布局,在活动布局中添加一个占位符视图,以编程方式创建该Fragment,并使用transaction.replace()将其添加到布局中。也许是因为这是我在占位符视图中交换Fragments的主要方法,而且在可能的情况下,我倾向于只使用一种方法来处理事情。
是的,Fragment专门为支持大屏幕高效利用区域而引入。处理Fragment非常容易且在内存方面表现良好。但是嵌套Fragment会带来麻烦。
如果您想要分割屏幕,片段非常有用。这样,您可以在同一屏幕上拥有不同的视图。另一种使用片段的方式是,假设您有选项卡来对项目进行分类。您可以将服装、鞋子作为选项卡。每个选项卡都将有一个片段来容纳产品。选项卡可以保存在活动或片段中。我发现片段比活动稍微快一些,但在大多数情况下,这并不是您真正会注意到的事情。无论它们是否旨在提高速度,它们仍然似乎/感觉稍微快一些。
使用片段的缺点是,某些回调(例如onBackPressed)仅适用于活动。片段无法访问此内容。我经常发现最好尽可能地减少活动数量。还要记住,活动不仅是视图,它们也是屏幕。而片段只是一个视图,没有屏幕。工具栏/操作栏等仅适用于活动,但是如果您使用自定义工具栏,则可以通过实现onTouch(如果不是按钮而是某个对象)或onClick(按钮)在片段中使用它们,这些方法将为您提供所需的内容。因此,确实存在一些缺点,但至少其中几个几乎都有解决方法。
我确实同意片段转换非常棒,并且在使用后退按钮和onBackPressed时弹出堆栈可以解决问题。
我经常在父活动中使用switch语句等来查看哪个片段需要显示,我经常使用接口传递bundle等更新它。不确定是否有其他人发现更有效的方法。但是当切换视图时,我确实发现它非常有用。
是的,对于大多数事情来说,片段都是顶级的。
MapView
,只要您将所有生命周期方法转发给它即可,如 Maps V2 文档中所述:https://developers.google.com/maps/documentation/android/map#mapview - CommonsWare