【问题标题】:Android infinite activity stackAndroid无限活动堆栈
【发布时间】:2016-06-08 14:31:52
【问题描述】:

我开发 android 应用程序并遇到内存管理问题。我有能力通过无限的方式导航:

User activity that contains followers of user (U) -> Another user (U) -> post (P) -> U -> U -> P -> ... etc

所以,基本上我只是通过开始新活动来完成它,但我注意到当我打开大约 6-7 个活动时,它会因内存错误而崩溃。每次活动开始吃越来越多的记忆。 首先 - 在开始新的活动之前完成()以前的活动并不好,因为我需要让用户完全回来。 其次,我试图用

修复它
FLAG_ACTIVITY_REORDER_TO_FRONT 

使用已经启动的活动,而不是开始新的活动。但它不会在第一次使用时重新绘制它。例如,当我第一次恢复帖子活动时,它与以前的帖子一起出现,但是当我返回并再次打开它时一切正常。但仍然没有运气。

组织这种无限堆栈的最佳方式是什么?它能够使堆栈存储例如 5-6 个先前的步骤并关闭非常深的活动。例如,它是否能够将完整的活动状态存储到某个存储并手动组织活动堆栈?

问候

【问题讨论】:

  • 有可能,但方法不对。如果您的情况看起来像无限循环,请使用 Fragments 而不是活动
  • 而且,顺便添加更多代码或您的草稿窗口切换流程。它可以更容易理解
  • 我在一个可以无限导航的类似应用中工作。该应用程序是一个非常注重照片的应用程序,它的照片任务依赖于Picasso。首先,不幸的是,这就是 Android 的工作方式。这很可悲,但事情就是这样。但对我来说,只有 6 或 7 个活动似乎很少,这表明您可能在某个地方发生了内存泄漏。在我的应用程序上,我可以在遇到问题之前轻松进行 60 次活动。所以我建议您检查github.com/square/leakcanary 以尝试找出您的应用程序可能存在的漏洞。
  • @once2go 我知道这在 Android 的情况下是不好的方式,但这是我们需要解决的任务。我们将使用片段而不是活动的任何方式都不会真正相信这会解决问题。而且我认为这种方式比使用许多活动更错误。您可以查看 pinterest 应用程序:它具有无限堆栈,您可以通过堆栈一直返回。

标签: android android-activity


【解决方案1】:

cmets 上没有足够的地方来写我所有的东西,这就是为什么我试图描述解决方案的原因。 正如我所见,您的内容切换流程中没有不同的功能。那么,你知道回收模式吗? 您可以创建仅具有 2 个片段(用于用户和用于发布)实体的适配器,其中数据绑定将从键值映射生成。您必须在正面装订期间创建此地图。看起来像这样: 地图堆栈地图 ->活动->插入用户片段->将用户ID添加到映射作为键->用帖子替换片段->将帖子ID添加到映射作为用户键的值->替换为用户->将键添加到映射...。 ..等。对于回溯使用地图?以相反的顺序(获取 id,获取数据,将数据绑定到片段)。

内存比活动实例化更好。

P.S:您可以根据需要组织堆栈,不仅可以使用键值,还可以使用数组或链表,甚至可以使用堆栈对象实体的数组列表

【讨论】:

    【解决方案2】:

    尝试在清单中的活动中设置android:launchMode="singleInstance"。 (感谢这个答案https://stackoverflow.com/a/9598551/2808913

    如果这些 Activity 之一是您的“主”Activity,即您通常在应用中启动并返回的 Activity,您可以将其设置为以 FLAG_ACTIVITY_CLEAR_TOP 启动。这样,每次您返回此活动时,您的后台堆栈都会被清除。按下后退按钮将使您退出应用程序,而不是返回到上一个活动。

    【讨论】:

    • 是的,这是有道理的,但是当新实例出现在堆栈顶部时 - 无法返回。我在这里发现了一些有趣的东西stackoverflow.com/a/3473377/997867 我知道这不是更好的方法,但是你怎么看?
    • 嗯,我认为如果你想手动完成,你应该使用片段。我知道很多人不喜欢碎片,但这种解决方案更丑陋。连作者都不推荐。至少片段在 Android 中是相当标准的 :)
    猜你喜欢
    • 2011-07-15
    • 2019-06-19
    • 2017-10-02
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2011-03-07
    相关资源
    最近更新 更多