2010-10-05 84 views
0

建议您创建自己的Activity堆栈(仅包含活动名称,而不是默认堆栈中的完整活动)以改进应用程序的内存消耗。覆盖默认活动堆栈

什么即时通讯基本上是做的是维护一个包含活动名称的字符串堆栈,并重写后端按钮功能,以启动栈顶的Intent并完成当前活动。我还添加了一个参数来决定当前活动是否应该进入堆栈(在某些情况下有用)。所以基本上我每做一次startActivity就需要开始一项新活动并完成当前活动,以便默认堆栈中没有任何内容,并且后退按下时也从我的堆栈开始活动并完成当前活动。

问题1:这样做是可取的吗?可能发生的问题有哪些?

问题2:有人可以给我一个默认的Android活动堆栈的内存使用情况的想法,以便我可以将其与我自己的实现进行比较吗?

回答

4

建议您创建自己的Activity堆栈(仅包含活动名称,而不是默认堆栈中的完整活动)以改善应用程序的内存消耗。

通常情况下,不超过一个Web应用程序通常会侵入浏览器以更改浏览器历史记录并将项目从浏览器缓存中删除。

可能发生的问题是什么?

您在每次操作中都会失去状态。通常,BACK按钮将用户带回到先前的活动,其状态保持不变。如果Android选择关闭一项活动以释放内存,甚至还有一个维护此状态的框架(onSaveInstanceState())。

通过完成用户尚未完成的活动并强制其重新创建,这会浪费CPU时间和电池寿命,您还会强制执行更多垃圾回收。

我对你的策略对配置更改(例如,旋转,停靠)的影响有一些唠叨的担忧,但我无法将自己的手指放在任何细节上。

有人可以给我一个默认Android活动堆栈的内存使用情况的想法,以便我可以将其与我自己的实现进行比较吗?

你问的是错误的问题。你应该问的问题是:有什么证据表明首先存在问题?

完全有可能你的应用程序有一些非常不寻常的东西让你的策略变得完美(例如,大量内存密集型位图)。但是,通常情况下,除非有明显的问题,否则诸如您正在做的事情属于“不成熟优化”的标题。即便如此,无论实际问题是什么,都可能有更好的解决方案......但除非确定存在问题,否则您不会知道。

+0

非常感谢您的洞察。我会进一步调查。根据您的评论判断,我认为我将不得不恢复到默认功能。 – 2010-10-05 18:39:56