Android:返回之前的Activity

时间:2016-09-10 00:29:27

标签: android android-activity

当您进入某个活动时(我们将其称为A),然后您调用后续活动(B),可能是因为单击A中的按钮,然后返回到该先前的Activity A,通过单击Back按钮或从B中显式调用finish(),它会导致A完全重建,调用其构造函数及其OnCreate()方法等。

有没有办法防止这种情况发生,以便它实际上确实返回到先前已经存在的活动A?

4 个答案:

答案 0 :(得分:3)

如果我错了,请纠正我,但不应该在onCreate()打电话给我,而不是简单化,但我们说活动的管理方式就像一个简单的堆栈,我们称之为AppStack

当调用活动A的onCreate()时,操作系统将活动实例推送到AppStack

________ _________________
Activity|
___A____|_________________

当您单击活动A上的按钮时,它会向活动B启动新意图

Intent actB = new Intent(this, ActivityB.class);

然后将活动A置于Stopped

当调用活动B onCreate()时,操作系统会将该活动实例推送到AppStack上

________ __________________
Activity|Activity|
___A____|___B____|_________

现在,如果您在活动B中调用finish()super.onBackPressed(),操作系统将pop()来自AppStack的活动

________ __________________
Activity|
___A____|__________________

当操作系统返回上一个活动时,它会看到它是Stopped并开始Resuming itonResume()的过程。

现在,如果您需要持久化某些数据,可以通过覆盖onResume()

添加它

查看活动生命周期文档,了解更多信息:

enter image description here

答案 1 :(得分:1)

这是设计:

  

如果活动暂停或停止,系统可以通过要求完成(调用其finish()方法)或简单地终止其进程来从内存中删除它。当活动再次打开时(在完成或杀死之后),必须全部创建它。

Activity Lifecycle。这也是Service类存在的原因:

  

服务是一种应用程序组件,可以在后台执行长时间运行的操作,但不提供用户界面。另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。

答案 2 :(得分:1)

这不是一个典型的场景,但是当回到该活动时调用onCreate()意味着Android OS会在后台杀死它。

原因: Android正在经历一些内存短缺,因此必须完成一些后台任务。

  

有没有办法阻止这种情况发生?

不,你无法控制它,有很多原因导致内存不足。安装了其他应用程序,某些设备消耗的电量超出预期。 虽然,您可以通过将当前信息存储在onSaveInstanceState()并从{{1}恢复值来处理此用例}}

答案 3 :(得分:1)

在ActivityB上调用finish()或按回来只会破坏ActivityB。 ActivityA不会被完全重建。这意味着它不会调用onCreate方法。它只会调用onResume

这是正常行为。

但是,在特殊情况下,系统可能会破坏ActivityA(可能因为它需要内存来执行另一个任务),所以当你回到它时,系统将不得不重建它。

为了模拟这种情况,有一个设置可以检查/取消选中,称为“不要保持活动"。

如果你已经检查了,你将模拟上面描述的情况,它将一直销毁ActivityA,一旦它没有显示,当你回到它时,系统将不得不重建它调用{{ 1}}。

enter image description here