2014-11-04 29 views
0

我正在做一个演示,了解back栈和activity的生命周期。Onstop方法如何为这个演示工作?

我做:

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

我推出了这款应用程序,主要活动是所示。然后按下按钮显示对话框,然后打开MainActivityDialog。然后再次按下MainActivityDialog上的按钮,然后打开BActivity。最后,我按下了后退按钮。

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

下面是这个应用程序的日志:

Log message of backstack of this app

我的问题是:

  1. 为什么MainActivity从MainActivityDialog推出BActivity后得到停止?然后在调用BActivity生命周期方法之后,为什么MainActivityDialog会停止?

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

回答

0

我不是Android的专业人士,但由于没有人回答,我会尽我所能。我想帮忙,因为我也是第一次学习android,就像你做的一样(使用log cat查看activiti的当前状态)。

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

每当您开始新的活动时,旧的活动将始终被暂停/停止。

然后在调用BActivity生命周期方法后,为什么 MainActivityDialog得到停止?

因为现在当前的活动活动BActivity,换句话说:MainActivityDialog未激活/可见因此它的停止/暂停。

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

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

请随意评论,即时通讯也仍然在多个活动学习:)

+0

我的问题是为什么mainActivity onstop比mainActivityDialog先调用,当我们去BActivity? – Akashsingla19 2014-11-04 06:53:33

+0

对不起,我不知道那个。也许它是如何“对话”的工作。我的意思是,“对话框”(启动它的活动)的父项将始终停止。 – 2014-11-04 06:58:56

1

调用的顺序onStop()onDestroy()是不确定的。

如果您的活动堆栈中有多个活动在屏幕上不再可见,Android可以随时调用onStop(),只要它想要以及它想要的顺序。这只是活动的一个指示,用户不再可以看到它。您不能依靠onStop()调用多个活动的顺序。

onDestroy()也是如此。一旦该活动完成,Android可以针对该活动调用onDestroy()。如果您的任务中有多个完成的活动,则Android可以随时调用onDestroy(),只要它想要以及按照它的任何顺序。这也是不确定的。对onDestroy()的调用只是为了通知活动它不再处于活动状态,并且它应该释放它可能拥有的任何资源。

不保证onStop()onDestroy()有史以来被称为。最后的生命周期调用是onPause()。之后,Android可以在不调用任何其他生命周期方法的情况下杀死进程。

在第二个问题中,您想知道为什么,在用户按下BActivity上的BACK按钮之后,MainActivity首先开始,然后是MainActivityDialog。其原因是,MainActivity在屏幕上的第一个可见然后MainActivityDialog是对的MainActivity顶部屏幕可见(因为MainActivityDialog是对话为主题,它不覆盖整个屏幕,你可以看到的MainActivity部分在它下面)。