安卓中活动(Activity)过多?

14

我开始进行Android项目时有一个误解,即每个显示在应用程序中的屏幕都必须是一个新的活动。现在我已经完成了这个项目,并在模拟器和几部Android手机上进行了测试。到目前为止,我没有遇到任何问题,但最近我在某个地方读到说,在应用程序中有太多活动是一个相当糟糕的想法。

目前我的应用程序大约有15-20个活动。理想情况下,我听说应该只有5-6个。我需要重构我的代码,还是只需在每个活动完成它的部分后结束即可?


每个活动都是完全不同的屏幕吗?还是它们只是显示的数据不同?您可以通过重构将扩展Activity的类组合在一起。 - Code-Apprentice
6个回答

39

在创建复杂应用程序时,您肯定需要创建许多活动。因此,您的应用程序需要多少个活动取决于它的要求。项目中的活动数量不会影响性能。

影响性能的是您的Android堆栈中活动的数量。因此,最好将5-6个活动保留在堆栈中(如果不再需要,请完成相应的活动)。

因此,根据您的应用程序需求创建尽可能多的活动,但同时只保持较少数量的活动处于打开状态。


如何结束活动? - Ruchir Baronia
1
我有15个用户不断打开的活动。我需要做些什么来关闭之前的活动吗?谢谢! (+1) - Ruchir Baronia
我的项目是关于教育的,它有很多级别和课程。我是否应该为每个课程都有一个活动?如果是这样,我需要有2~3千个活动。 - Mohammad Afrashteh
@RuchirBaronia 只需调用 finish() 方法即可。每个活动类都有这个方法。 - Hanako

8
如果你的项目有很多活动,但有些活动并不重要,这意味着在另一个活动开始后你不需要任何活动。在清单文件中设置:android:noHistory="true" 示例:
Activity1 -> Activity2 -> Activity3 -> Activity4..................-> Activity20

在清单文件中:
  activity android:name=".Activity1" android:label="@string/app_name" android:noHistory="true"

如果您使用 Intent 再次调用 Activity1,那么请在 startActivity() 前设置 finish()。我认为这可以帮到您。

4
Android系统会尽可能地维护应用程序进程,但最终需要清除旧的进程以为新的或更重要的进程腾出内存。这也适用于在后台运行的Activity...旧的Activity由系统管理并在系统需要为新进程腾出内存时销毁。
话虽如此,我认为您应该考虑以下两点:
  1. 用户体验。您的应用程序是否真的需要15-20个Activity?您能否以某种方式减少屏幕数量?通常情况下,较少的Activity更好,因为它在用户导航应用程序时需要较少的交互。

  2. 代码设计。虽然每个Activity都有自己单独的类,但这并不限制您在实现应用程序时进行智能设计决策。例如,您可以尝试通过让它们扩展一个abstract class来将相似的Activity分组。随着Android项目规模的增长,它们变得越来越难以管理。以这种方式在相似的类之间共享代码将确保您可以轻松地对应用程序的核心进行简单的更改。


我有15个用户不断打开的活动。我需要做些什么来关闭之前的活动吗?谢谢! (+1) - Ruchir Baronia

3
[编辑] - 截至2018年Google IO,谷歌建议使用一个活动和多个片段。这是需要考虑的。
最终取决于你要做什么。有时候你无法修改视图以使其有所不同。理想情况下,5-6个活动很棒,但在某些情况下,这样做是不可行的。我曾经做过一个移动应用程序,其中有大约40个不同的类和约18个活动。基于应用程序与用户交互的方式,必须以这种方式完成。如果您可以将2或3个活动合并为一个,那就太好了。它也将有助于文件大小和优化,但如果您无法这样做,请不要过于担心。

1
我认为15个不同的屏幕等于15个不同的活动。我认为一些人能够减少活动数量的原因之一是由于片段的引入。虽然有人会争论为什么要使用片段,如果单独的活动可以工作。我想这取决于开发人员的偏好。

除非你正在做一些在平板电脑上看起来很好的事情并且使用了片段。 - Morrison Chang
我有15个用户经常打开的活动。我需要做些什么来关闭之前的活动吗?谢谢! (+1) - Ruchir Baronia

-1

使用片段比活动更好。我们可以在单个活动中使用多个片段,因此我们应该始终考虑使用片段。我见过具有5-6个活动和150多个片段的复杂应用程序。


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