【问题标题】:Android app activity stopping when a pop up from other app appears出现来自其他应用程序的弹出窗口时,Android 应用程序活动停止
【发布时间】:2017-01-26 22:59:44
【问题描述】:

我的应用中的某些活动出现问题 - 这是一款游戏。游戏本身有 2 个活动 - Player1Players2。在此 Activity 中,如果出现来自另一个应用程序(例如 Whatsapp)的弹出窗口,则该 Activity 关闭并重新打开最后一个 Activity(例如,在我的应用程序中,一个名为 ChooseLevelChooseGameType 的 Activity。

我认为这与我的onStoponPause 方法有关,我在这些活动中调用finish();我应该更改哪一项才能使出现的弹出窗口不会关闭活动?因为我确实希望它在应用程序不再显示在屏幕上时关闭,但在弹出窗口出现时保持。

【问题讨论】:

  • 您有任何代码示例或堆栈跟踪吗?
  • 您为什么要在onPause 甚至onStop 期间完成一项活动?弹出窗口将调用 onPause,如果操作系统自行终止您的应用程序,onStopfinish 仍然会运行
  • 不需要对这些回调中的任何一个调用完成。
  • @cricket_007 我现在得到了区别,但是如果我的应用程序仍在工作但没有显示(不是前景也不是背景),那么onStop 不会调用完成吗?

标签: android android-activity


【解决方案1】:

onPause()onStop() 之间有一个简洁但关键的区别。来自activity docs

onPause():

当系统即将开始恢复之前的活动时调用。这通常用于提交对持久数据的未保存更改、停止动画和其他可能消耗 CPU 的事情等。此方法的实现必须非常快速,因为在此方法返回之前不会恢复下一个活动。 如果活动返回到前面,则后跟 onResume(),如果对用户不可见,则后跟 onStop()。

onStop():

当 Activity 不再对用户可见时调用,因为另一个 Activity 已经恢复并覆盖了这个。这可能是因为正在启动一项新活动,正在将现有活动带到此活动之前,或者此活动正在被销毁。 如果此 Activity 回来与用户交互,则后跟 onRestart(),如果此 Activity 消失,则后跟 onDestroy()。

因此,您有两种情况必须决定如何继续使用您的应用程序。如果您不想在您的应用程序上调用finish(),而另一个Activity 在这种情况下没有完全覆盖您的应用程序,例如Dialog,那么您必须在onPause() 中删除您的finish() 调用。

【讨论】:

    【解决方案2】:

    您的错误必须在onPause() 中,因为当应用不再处于前台时,Android 中始终会调用该方法。因此,如果有来自其他应用程序(如 WhatsApp)的活动显示,则会调用 onPause()。因此,为避免关闭您的应用,请从那里删除 finish(); 调用。

    【讨论】:

      【解决方案3】:

      问题出在您调用finish()onPause() 方法中。当另一个应用程序显示 onPause() 时肯定会被调用,因为您的应用程序实际上处于暂停状态。正如其他用户已经指出的那样,避免拨打finish()。此外,在onStop() 方法中调用finish() 是一种不好的做法,而且毫无意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        • 2015-11-14
        • 2022-01-16
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多