Android 父活动通常在锁定时停止,但在方向更改后不会停止

Android 父活动通常在锁定时停止,但在方向更改后不会停止,android,Android,我有一个带有两个活动的演示应用程序。父应用程序启动时启动,子应用程序通过父应用程序中的按钮启动。子项设置为透明背景,以便在子项启动时父项不会停止 我启动应用程序,启动Parent,然后启动Child。然后我锁定设备。我看到子对象调用onStop(),然后父对象调用onStop() 但是,如果我没有锁定应用程序,而是旋转设备,这会触发方向更改,那么当我锁定应用程序时,只有孩子调用onStop()。在我解锁应用程序并点击后退按钮后,子级和父级都调用onStop(),因此父级活动处于一种奇怪的状态,它

我有一个带有两个活动的演示应用程序。父应用程序启动时启动,子应用程序通过父应用程序中的按钮启动。子项设置为透明背景,以便在子项启动时父项不会停止

我启动应用程序,启动Parent,然后启动Child。然后我锁定设备。我看到子对象调用onStop(),然后父对象调用onStop()

但是,如果我没有锁定应用程序,而是旋转设备,这会触发方向更改,那么当我锁定应用程序时,只有孩子调用onStop()。在我解锁应用程序并点击后退按钮后,子级和父级都调用onStop(),因此父级活动处于一种奇怪的状态,它不可见,但它没有调用onStop()

  • 为什么会这样
  • 当设备被锁定时,如何让家长调用onStop()
  • 我创建了一个简单的Android项目来演示我看到的问题


    如果我
    启动应用程序->启动儿童活动->旋转设备->锁定设备->解锁设备,这就是我在Nexus 5(Android 5.0.1)上得到的:

    E/ROTATION﹕ ParentActivity.onStart()
    E/ROTATION﹕ Orientation: portrait
    E/ROTATION﹕ ChildActivity.onStart()
    E/ROTATION﹕ Orientation: portrait
    E/ROTATION﹕ ChildActivity.onStop()
    E/ROTATION﹕ ChildActivity.onStart()
    E/ROTATION﹕ Orientation: landscape
    E/ROTATION﹕ ParentActivity.onStop()
    E/ROTATION﹕ ParentActivity.onStart()
    E/ROTATION﹕ Orientation: landscape
    E/ROTATION﹕ ChildActivity.onStop()
    E/ROTATION﹕ ChildActivity.onStart()
    E/ROTATION﹕ Orientation: portrait
    E/ROTATION﹕ ParentActivity.onStop()
    E/ROTATION﹕ ParentActivity.onStart()
    E/ROTATION﹕ Orientation: portrait
    E/ROTATION﹕ ChildActivity.onStop()
    E/ROTATION﹕ ChildActivity.onStart()
    E/ROTATION﹕ Orientation: landscape
    E/ROTATION﹕ ParentActivity.onStop()
    E/ROTATION﹕ ParentActivity.onStart()
    E/ROTATION﹕ Orientation: landscape
    
    i、 例如,无法重现您描述的问题。事实上,如果您偶尔看不到
    onStop()
    ,这是正常的,因为它不能保证被调用

    请注意,在内存不足的情况下,如果系统没有足够的内存在调用活动的onPause()方法后保持其进程运行,则可能永远不会调用此方法

    此外,请参见该页上提供的活动生命周期表:

    突出显示的文本如下所示:

    注意上表中的“Killable”列——对于那些标记为Killable的方法,在该方法返回承载活动的进程后,系统可能随时终止该进程,而不执行其另一行代码因此,应使用onPause()方法将任何持久数据(如用户编辑)写入存储器

    也就是说,如果正在执行的操作很重要,则应使用
    onPause()
    而不是
    onStop()


    希望这能有所帮助。

    希望这个答案能帮助你,谢谢ozbek。我很惊讶你没有看到这种行为。我每次都看到它。当设备锁定时,您是否改变了方向?我确保在锁定解锁时保持方向不变。我在Nexus5和4.4.4上进行了测试。我知道在某些情况下不会调用onStop(),但对我来说,这种情况每次都会发生。我可以使用onPause(),但我更愿意跟踪活动完全不可见的情况,而不是只是部分模糊。但是父活动不可终止,因为它在子活动下是否可见?@SkyKelsey:不,我没有更改设备方向。但是,当我测试时,屏幕锁定(PIN)已启用。也许这就是效果,但我现在不能测试它(旅行,对不起)。主要的一点是,你不能依赖于
    onStop
    @EugenPechanec:否定的,当scree关闭和/或锁屏可见时,父活动和子活动都是不可见的。我将奖励你运行示例项目并试一试,尽管我觉得这并不能回答问题。