完成活动onPause但仍然在后台?

时间:2013-07-19 16:56:23

标签: android android-activity android-ui back-stack

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

3 个答案:

答案 0 :(得分:2)

没有。这个结论来自the task and backstack documentation以及activity documentation以及对stack data structure如何运作的一般理解。

堆栈数据结构只有2个可能的操作push / put,这会为集合添加一些东西,pop会删除它。堆栈中的最后一个模型,或LIFO,最后添加的东西 - 在你的情况下是一个活动 - 是调用pop时首先删除的东西。

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

对于你想要做的事情,堆栈必须包含一些中间状态,其中一个活动不存在但是更类似于引用的东西,当移动到顶部时,将指示相应的活动应该重新创建。因为这不是麻袋的工作方式 - 它只是举行活动 - 状态存在,所以你所谈论的结果是不可能的。

答案 1 :(得分:2)

您的目标是最大限度地减少内存的使用,只需使用活动生命周期,您可以执行此选择(如果需要)

- 只需将 onCreate()方法留空。(仅执行setContentView(layout))

-Override onResume();

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

- 并在 onPause()回收您的所有位图并将其设置为null(我认为您使用的是Bitmaps,这就是为什么您非常谨慎)。并删除您的观点。

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

答案 2 :(得分:1)

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