第二个活动开始时,第一个活动未停止

时间:2016-07-28 15:46:35

标签: android android-activity android-lifecycle activity-lifecycle

根据Android活动生命周期,当活动不再可见时,onStop将被调用。但如果我快速退出第二项活动,就不会发生这种情况。

我有两项活动HomeActivityDetailActivity

步骤1.按HomeActivity上的按钮导航至DetailActivity

步骤2.按DetailActivity上的导航至HomeActivity

导航到DetailActivity时,应根据活动生命周期调用onStop的{​​{1}},因为HomeActivity获得DetailActivity。 但如果我快速按下onStartonStop就不会被调用。

如果立即反击,活动生命周期......

DetailActivity

如果延迟后按下(比如说几秒钟后在DetailActivity上),则按下活动生命周期

HomeActivity: onPause
DetailActivity: onStart
DetailActivity: onResume
DetailActivity: onPostResume
DetailActivity: onPause
HomeActivity: onResume
HomeActivity: onPostResume
DetailActivity: onStop

当新HomeActivity: onPause DetailActivity: onStart DetailActivity: onResume DetailActivity: onPostResume HomeActivity: onStop DetailActivity: onPause HomeActivity: onStart HomeActivity: onResume HomeActivity: onPostResume DetailActivity: onStop 启动时,这看起来不像是一个错误,之前的活动没有停止?

2 个答案:

答案 0 :(得分:0)

According to Android Docs关于停止和重新启动活动

  

用户在您的应用中执行启动新活动的操作。创建第二个活动时,将停止当前活动。如果用户然后按“返回”按钮,则重新启动第一个活动。

他们应该更新它来说If the user the presses the Back button but not to quickly哈哈,但我认为iheanyi是正确的,因为在DetailsActivity命中onPostResume之后,某些其他进程可能已被授予cpu时间操作系统可以继续使用HomeAcitvity的onStop进程

之前按下后退按钮

答案 1 :(得分:-1)

您已经描述了正常行为。以下是https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle对此的说法:

  

当活动不再对用户可见时调用,因为   另一项活动已经恢复并涵盖了这一项。这可能   发生的原因是因为正在开始新活动,现有活动   被带到这一个面前,或者这个被摧毁。   如果此活动返回,则跟随onRestart()   如果此活动消失,则与用户或onDestroy()进行交互。

所以,你可能想知道,如果我的新活动是可见的,那是不是意味着以前的活动是不可见的?并不是的。您的新活动可能与旧活动不完全重叠(在这种情况下,旧活动的一部分仍然可见)。如果旧活动具有对用户“看不见”的元素,因为它们看起来与新活动中的元素相同,在技术上仍然可见(因为它们不会被新的完全阻止),这可能特别棘手。 / p>

除了可见性之外,您还可能无意中将生命周期方法定时问题导致此问题。假设您的onPause()需要很长时间才能完成。另一个活动可以完全隐藏旧的,满足onStop()的条件,但是在onStop()有机会运行之前你会转换回来。

最后,有许多任务需要在手机上运行,​​而很少有处理器来执行它们。必然,某些任务的优先级高于其他任务。想想当你的新活动占据前台时必须执行的代码 - 如果手机忙于执行你的活动代码,onStop()就没有时间运行。如果该代码然后触发onResume,则将完全跳过onStop。

从生命周期图中可以看出,您可以从onPause()转换回onResume(),而无需通过onStop()。也许您应该考虑这样的场景,以便更好地理解您的特定情况(以及为什么)。