Onstop Method如何为此演示工作?

时间:2014-11-04 06:39:02

标签: android android-activity android-lifecycle

我正在制作一个演示来了解后台和活动生命周期。

我做了:

  • MainActivity
  • MainActivityDialog(另一个活动主题为对话框)
  • BActivity

我启动了此应用,并显示了主要活动。然后按一个按钮显示对话框,然后打开MainActivityDialog。然后我再次按下MainActivityDialog上的按钮,然后打开BActivity。最后,我按了后退按钮。

MainActivity -> MainActivityDialog -> BActivity ---Back--->  MainActivityDialog

以下是此应用的日志:

Log message of backstack of this app

我的问题是:

  1. 为什么从MainActivityDialog启动BActivity后MainActivity会停止?然后在调用BActivity生命周期方法之后,为什么MainActivityDialog会被停止?

  2. 在BActivity中按下后退按钮后,MainActivity首先启动,然后MainActivityDialog启动,然后MainActivityDialog恢复?

2 个答案:

答案 0 :(得分:1)

对多个活动的onStop()onDestroy()的调用顺序是不确定的。

如果您的活动堆栈中有多个活动在屏幕上不再可见,Android可以随时调用onStop(),并按照其想要的顺序。这仅表示活动不再对用户可见。您不能依赖onStop()次呼叫多个活动的顺序。

onDestroy()也是如此。该活动结束后,Android可能会在活动上调用onDestroy()。如果您的任务中有多个已完成的活动,Android可以随时根据需要以任何顺序调用onDestroy()。这也是不确定的。对onDestroy()的调用只是告知活动它不再有效,并且它应该释放它可能拥有的任何资源。

无法保证onStop()onDestroy() 将被称为。保证的最后一个生命周期调用是onPause()。之后,Android可以在不调用任何其他生命周期方法的情况下终止进程。

在第二个问题中,您想知道为什么,在用户按下BActivity上的“返回”按钮后,MainActivity首先开始,然后是MainActivityDialog。原因是MainActivity在屏幕FIRST上可见,然后MainActivityDialog MainActivity上的屏幕上可见(因为MainActivityDialog是对话 - 主题,它不会覆盖整个屏幕,你可以在其下方看到MainActivity的部分内容。)

答案 1 :(得分:0)

我不是Android的专业人士,但由于还没有人回答,我会尽我所能。我想帮助,因为我也是通过做你喜欢的事情(使用log cat来看看activiti的当前状态)来学习android。

  

为什么MainActivity在启动BActivity后停止   MainActivityDialog?

每次开始新活动时,旧活动将始终暂停/停止。

  

然后在调用BActivity生命周期方法之后,为什么   MainActivityDialog被停止了吗?

由于现在当前有效活动为BActivity,换句话说:MainActivityDialog未处于有效/可见状态,因此已停止/暂停。

  

在BActivity中按下后退按钮后,MainActivity首先启动   然后MainActivityDialog启动,然后MainActivityDialog恢复?

是的,因为您从MainActivityDialog开始MainActivity,所以MainActivity将首先重新启动。

请随时发表评论,我还在学习:)。