【问题标题】:Android - onStop() will be called with a delayAndroid - onStop() 将被延迟调用
【发布时间】:2016-06-06 06:56:14
【问题描述】:

我发现我的活动onStop() 方法将在不到 10 秒的延迟内被调用。我以前从未见过这种行为。

注意:-活动是singleTop,它以Intent.FLAG_ACTIVITY_REORDER_TO_FRONT标志开头。

注意:-我使用的是 Build Tools v23.0.2。

延迟不在之前,该方法将被立即调用。

【问题讨论】:

  • 您能详细说明一下吗?哪个活动开始哪个?我猜这个问题至少有 2 项活动。
  • @TinTran 同意。请提供更具体的细节。
  • 你调试你的代码了吗?请详细说明您的问题,使用 logcat 粘贴一些代码 sn-p。它将帮助我们了解确切的问题。
  • 请给我们看一些代码
  • 您需要在问题中提供更多详细信息,以便人们提供帮助。无论哪种方式,我都不会依赖在任何时间范围内调用 onStop,只依赖 onPause。您不应该依赖 onStop 调用的顺序与覆盖活动的 onStart 的正确性。

标签: android android-activity lag activity-lifecycle


【解决方案1】:

我猜您正在启动另一个活动,并且您希望当前活动接收 onStop() 回调。根据activity lifecycle,onPause() 方法在 onStop() 之前调用。在某些情况下,onSaveInstance() 也会在 onStop() 方法之前调用。此外,当您调用 startActivity 或 startActivityForResult (再次,我假设这就是您希望调用 onStop 的原因)时,根据传递的参数,如果需要计算/获取/等这些参数,它可能在系统执行 startActivity 之前需要一段时间,这将是 Android 最早启动生命周期调用的时间。在此处没有任何代码的情况下,在调用 onStop 之前无法查看正在执行的其他内容。我建议您检查代码执行时间的时间线,从 startActivity 开始,在调用 onStop 时,可能通过记录每个调用的时间戳,从 startActivity 调用之前的时间戳开始,以开始时的时间戳结束onStop,查看时间都花在了哪里。我还建议通过确保 startActivity 或 startActivityForResult 的所有参数之前都设置为它们的值来简化这一点,如果还没有的话。

【讨论】:

    【解决方案2】:

    您可以通过将 noHistory:true 添加到清单文件中的活动或以编程方式设置标志来解决此问题。我遇到了同样的问题,这为我解决了问题。

    【讨论】:

      【解决方案3】:

      在我的例子中,当onStop() 被调用时我停止了视频播放器,但是onStop() 调用有10s 的延迟。

      您可以使用 eventBus、RxBus 之类的东西在

      中发布事件
      Application.ActivityLifecycleCallbacks {
      
          //post event here.and check the activity's Name in my targetActivity which play my video.
          onActivityStarted()
      
      }
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。当我使用 startActivity() 启动一个活动时,onStop() 在 onPause() 之后 10 秒被调用。

        在我的例子中,正在启动的活动有一个片段,它有一个 WebView。我不知道为什么,但如果我删除以下行,延迟只有 2 秒左右。

        webView.setScrollbarFadingEnabled(false);

        【讨论】:

          【解决方案5】:

          我刚遇到这个问题,调试后有一个案例是 AdView(Admob 横幅)导致这个问题。

          在活动 A(放置一个广告视图)中,我开始活动 B。从 B 回到 A 并立即调用 B 的 onPause,但所有停止/销毁都需要 10 秒才能被调用。移除广告横幅,然后一切恢复正常。

          只需在此处发布此案例以供任何人参考。

          【讨论】:

            【解决方案6】:

            可能是模拟器今天很慢

            但 onStop() 应该作为单个命令立即调用

            在此之前没有调用 onPause() 或任何东西

            【讨论】:

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