【问题标题】:Android Activity Lifecycle: onStart() -> onStop() possible?Android Activity 生命周期:onStart() -> onStop() 可能吗?
【发布时间】:2011-04-21 09:21:18
【问题描述】:

Android Application Fundamentals 中,它表示在调用活动生命周期的onStart() 方法之后,会调用回调方法onResume()onStop()。在活动“正常”启动的情况下,系统调用onCreate()onStart()onResume()。 但是有人知道onStart() - onStop() 一个接一个执行的例子吗?

【问题讨论】:

  • 一个接一个?中间什么都没有?我想这是可能的,但不太可能。 onStart 后面总是跟着 onResume。为什么?
  • 据我了解,它可能只发生在非常特殊的情况下,在这种情况下,android os 决定停止活动,因为其他超级重要的东西不能等待 onPause。

标签: android


【解决方案1】:
  1. 从您的活动中,启动另一个非全屏活动(例如,给它 android:theme="@android:style/Theme.Dialog")。

    此时,您的第一个活动已调用 onPause() 但未调用 onStop(),因为它不在前面但仍然可见。

  2. 按主页。

    此时会为您的第一个活动调用 onStop()。

  3. 重新启动您的应用。

    此时为您的第一个活动调用 onStart(),但不调用 onResume(),因为它上面仍然有非全屏活动。

  4. 按主页。

    此时 onStop() 在第一个活动上被调用,没有经过 onResume()。

【讨论】:

  • 如果这可行并且您对答案感到满意,为什么不将 hackbod 的答案设为正确? :)
【解决方案2】:

根据提供的页面上的流程图​​,如果不调用onResume(),就不可能调用onStop()。我可以想到一些潜在的场景,其中系统在启动应用程序的过程中关闭了它,但我不知道会触发什么或如何触发这种场景,或者它是否存在。

正如 Tseng 所指出的,有可能永远不会将任务带到前台(我在想,将手机与 Exchange 服务器同步的任务)。我想这样的任务永远不会调用onResume()onPause()

【讨论】:

  • 没试过,但也许通过在 onStart() 中调用 finish() ? (即使在那里调用它并没有多大意义:P)
  • 在花一些时间再次阅读生命周期之后,您的陈述也是错误的,正如文档所述:onStart():在活动对用户可见之前调用。如果活动进入前台,则使用 onResume(),如果隐藏,则使用 onStop()。
  • @Tseng 好点:后台任务可能永远不会得到任何前台操作,在这种情况下永远不会调用onResume()
【解决方案3】:

当用户离开你的活动时,系统调用 onStop() 来停止活动
(1)。如果用户在活动停止时返回,系统会调用 onRestart()
(2),紧接着是 onStart()
(3) 和 onResume()
(4)。注意无论什么场景导致activity停止,系统总是在调用前调用onPause()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多