1

我正在尝试最小化我的应用程序中的内存使用量,我正在做的一件事是在 onPause 方法中调用 finish() (我知道这不是最好的方法)。在大多数情况下,它似乎运行良好,但是当用户从下一个活动单击后退按钮时,它在逻辑上跳过已完成的活动并返回更远。是否有可能将该活动放在后台堆栈中,并且如果用户按下返回则重新创建?

4

3 回答 3

2

不,这个结论来自任务和 backstack 文档以及活动文档以及对堆栈数据结构如何工作的一般理解。

堆栈数据结构只有 2 种可能的操作 push/put,它向集合中添加一些东西,以及 pop,它删除它。堆栈遵循后进先出模型或 LIFO,其中最后添加的东西(在您的情况下是活动)是调用 pop 时删除的第一件事。

在 android 生命周期内,活动通常在按下后退按钮时从堆栈中弹出。此时onDestroy()调用并删除活动(onDestroy()如果要检查,您可以通过覆盖方法并记录结果来验证这一点)。onDestroy()或者,您可以通过按原样呼叫来强制呼叫finish()。有效地完成一项活动与压制是一样的。活动被销毁,必须重新创建才能将其添加到堆栈中。

对于您要执行的操作,堆栈必须包含一些中间状态,其中活动不存在,而是类似于引用的东西,当移动到顶部时,将指示应该重新创建相应的活动. 由于这不是麻袋的工作方式 - 它只包含活动 - 该状态不能存在,因此您所说的结果是不可能的。

于 2013-07-19T17:10:19.927 回答
2

您的目标是尽量减少内存使用,只需利用活动生命周期,您可以这样做(如果需要)

- 将onCreate()方法留空。(只做 setContentView(layout))

-覆盖onResume()

- 无论您在 onCreate 中做什么,只需将粘贴复制到 onResume()。

- 并在onPause()中,回收所有位图并将它们设置为 null(我认为您正在使用位图,这就是您对此非常谨慎的原因)。并删除您的意见。

现在会发生什么,当您启动新活动时,将调用onPause() 。这将删除您的所有位图和视图。当您回来时,将调用onResume()。(不会调用 onCreate)。这将再次初始化您的视图和位图。

于 2013-07-19T18:49:29.030 回答
1

不,我不认为这是可能的。一旦你完成了活动,它就消失了。但是,您可以实现和处理自己的堆栈。按下后,您将再次启动已关闭的 Activity。

于 2013-07-19T17:09:12.870 回答