我在我的应用中遇到了一些活动的问题 - 这是一款游戏。游戏本身有2项活动 - Player1
和Players2
。在此活动中,如果出现来自其他应用程序的弹出窗口(例如Whatsapp),活动将关闭,最后一个活动将打开(例如,在我的应用程序中,名为ChooseLevel
或ChooseGameType
的活动。
我认为这与我的onStop
和onPause
方法有关,我将finish();
称为这些活动。 我应该更改哪一个弹出窗口不会关闭活动?因为我确实希望它在应用程序不再显示在屏幕上时关闭,但是当弹出窗口出现时停留。
答案 0 :(得分:1)
onPause()
和onStop()
之间有一个整洁但关键的区别。来自activity docs
<强>的onPause():强>
系统即将开始恢复上一个活动时调用。这通常用于将未保存的更改提交到持久数据,停止动画以及可能消耗CPU等的其他事情。此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复。 如果活动返回到前面,则后跟onResume();如果用户不可见,则返回onStop()。
<强>的onStop():强>
当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动。这可能是因为正在开始新活动,现有活动被带到这个活动之前,或者这个活动正在被销毁。 如果此活动返回与用户交互,则执行onRestart(),如果此活动消失,则执行onDestroy()。
因此,您有两种情况需要决定如何继续使用您的应用。如果您不希望在其他finish()
完全覆盖您的应用的情况下在您的应用上拨打Activity
,例如Dialog
,那么您必须删除finish()
拨打onPause()
。
答案 1 :(得分:0)
您的错误必须在onPause()
,因为当应用不再处于前台时,该方法始终在Android中调用。因此,如果有来自其他应用程序的活动,例如WhatsApp,则会调用onPause()
。因此,要避免关闭您的应用,请从那里删除finish();
来电。
答案 2 :(得分:0)
问题在于onPause()
方法,您调用了finish()
。当显示另一个应用程序时{} {}将被确认,因为您的应用实际上处于暂停状态。正如其他用户已经指出的那样,避免拨打onPause()
。此外,在finish()
方法中调用finish()
也是一种不好的做法,毫无意义。