覆盖默认的Activity堆栈

时间:2010-10-05 11:42:02

标签: android

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

我基本上做的是维护一个包含活动名称的字符串堆栈,并覆盖后退按钮功能以启动与堆栈顶部的Intent并完成当前活动。我还添加了一个参数来决定当前活动是否应该进入堆栈(在某些情况下很有用)。所以基本上每次我必须启动一个新的活动并完成当前的活动以便默认堆栈中没有任何内容并且在后面按下也从我的堆栈启动活动并完成当前活动时,我会做startActivity

问题1:这样做是否明智?可能发生的问题有哪些?

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

1 个答案:

答案 0 :(得分:4)

  

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

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

  

可能会出现哪些问题?

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

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

我对您的策略对配置更改(例如轮换,停靠)的影响有些担忧,但我不能指责任何细节。

  

有人可以告诉我默认Android活动堆栈的内存使用情况,以便我可以将它与我自己的实现进行比较吗?

你问的是错误的问题。你应该问的问题是:首先出现问题的证据是什么?

完全可能的是,您的应用程序存在一些非常不寻常的情况,使您的策略成为合理的策略(例如,大量内存密集型位图)。但是,一般来说,除非有明显的问题,否则你所做的事情都属于“过早优化”的标题。即便如此,对于实际问题而言,可能有更好的解决方案......但除非你确定确实存在问题,否则你不会知道。