【问题标题】:Does having too much Activities affect my perfomance?活动过多会影响我的表现吗?
【发布时间】:2017-12-05 10:02:56
【问题描述】:

所以,我有近 20 个活动,因为我有近 20 个布局,其中包含重要信息(关于应用程序内容)。好吧,我不得不说在这些Activity中大部分都是TextViews。

是否有类似“堆栈”的东西可以放置活动?如果有堆栈,是否会影响应用程序运行时的性能?我怎样才能看到这个堆栈?

是否有一个应用程序应该有多少活动的规则,或者它取决于应用程序的目的是什么?

如果您能解释一下活动是如何举行的,或者在我运行我的应用程序时如何处理它们,那就太好了。因为我不希望这 20 项活动影响我的表现。

【问题讨论】:

  • 害怕活动的数量就像在说“我不会在手机上安装我需要的所有应用程序,因为它们可能会占用我一半的内存......”。如果您的用例需要 20 个不同的布局,那么使用 20 个活动是合理的。
  • 这不是问题。我不“后悔”有 20 个活动。但如果有性能影响,那么我可以合并 1-2 个活动。
  • 这取决于手机(及其性能)。 Activity 是 Android 中的一个基本概念,20 应该不会对性能产生太大影响。

标签: android performance android-activity stack


【解决方案1】:

第一个问题:

是否有类似“堆栈”的东西可以放置活动?如果 有一个堆栈,它在运行应用程序时会影响性能吗? 我怎样才能看到这个堆栈?

是的,您可以将活动安排在一个任务中,该任务将它们组织在一个后堆栈中。请参阅有关如何使用它们的文档。

任务是用户在什么时候与之交互的活动的集合 执行某项工作。这些活动被安排在一个堆栈中—— 回栈)——按照每个活动打开的顺序。为了 例如,一个电子邮件应用程序可能有一个活动来显示新的列表 消息。当用户选择一条消息时,将打开一个新活动 查看该消息。这个新活动被添加到后台堆栈。如果 用户按下后退按钮,新活动完成, 从堆栈中弹出。以下视频提供了一个很好的概述 后台堆栈是如何工作的。

来源:https://developer.android.com/guide/components/activities/tasks-and-back-stack.html

第二个问题:

是否有一个应用程序应该拥有或执行多少活动的规则 取决于应用程序的目的是什么?

是的,您的应用所需的 Activites 数量取决于用例,甚至取决于您构建项目的风格。例如,您还可以使用 Fragments 并在需要时在一个 Activity 中替换它们。两种方式各有利弊。

【讨论】:

    【解决方案2】:

    这 20 项活动只会影响您的 apk 大小。但如果他们只有一个 TextView,这将不会是可观的。

    如果用户浏览所有 20 个活动并将它们保存在一个堆栈中,例如活动 A 调用活动 B,调用活动 C ...,您的活动堆栈将太大,并且可能 android 会破坏最旧的一个释放资源。有了这个,实现所有 Activity 生命周期并将数据保存在包中非常重要,这样当用户返回到您的 Activity 时,您可以从头开始以与之前完全相同的状态重新创建它。

    --编辑--

    正如@CommonsWare 在 cmets 中指出的那样,Android 不会杀死您最古老的活动,如果您的案例与我在我的回答中描述的相符,请查看他博客中的这篇文章以获取建议:https://commonsware.com/blog/2011/10/03/activities-not-destroyed-to-free-heap-space.html

    【讨论】:

    • “可能 android 会销毁最旧的以释放资源” -- that does not happen.
    • @CommonsWare 感谢您提供信息。我一直认为 Android 会扼杀我的活动。那么,为什么要使用 onSaveInstanceState?仅当我的活动在后台运行时?
    • 那么 SaveInstanceState 方法呢?
    • 哦,没看到你的问题 jonathanrz
    • @jonathanrz:onSaveInstanceState() 有两个角色。部分原因是用于配置更改(例如屏幕旋转),其中活动被销毁和重新创建。部分是为了进程终止。 Android 不会破坏活动以释放 RAM——它会终止您的整个进程。如果用户在此后很快(不到 30 分钟)尝试返回您的应用程序,Android 将尝试假装您的进程一直存在,并在此过程中根据需要将您保存的实例状态 Bundle 对象交还给您.
    【解决方案3】:

    在一个活动中分层运行 20 个活动或在一个活动中运行 20 个类之间没有性能差异。恰恰相反,前者的性能会更好,因为您可以动态添加/删除活动,而后者将拥有所有活动的固定负载。

    【讨论】:

      【解决方案4】:

      这取决于您如何使用它们。如果您了解活动的生命周期

      Activities Lifecycle

      您会看到,如果您在堆栈中保留大量活动,那么您会降低性能,但如果您销毁它们,则不会。你只会影响 apk 的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        • 2012-09-18
        相关资源
        最近更新 更多