我有一个包含两个活动的演示应用。应用程序启动时启动Parent,通过Parent中的按钮启动Child。子项设置为透明背景,以便在子项启动时父项不会停止。
我启动应用程序,启动Parent,然后启动Child。然后我锁定了设备。我看到Child调用onStop(),然后Parent调用onStop()。
但是,如果不是锁定应用程序,我会旋转设备,这会触发方向更改,然后当我锁定应用程序时,只有Child调用onStop()。在解锁应用程序并点击后退按钮后,Child和Parent都调用onStop(),因此Parent Activity处于这种奇怪的状态,它不可见,但它没有调用onStop()。
我创建了一个简单的Android项目来演示我遇到的问题。
答案 0 :(得分:1)
如果我launch the app -> start ChildActivity -> rotate the device -> lock the device -> unlock the device
,这就是我在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
即,无法重现您所描述的问题。事实上,如果你偶尔看不到onStop()
,这是正常的,因为它不能保证被调用。
请注意,在内存不足的情况下,可能永远不会调用此方法,在这种情况下,系统没有足够的内存来保持活动的进程在调用onPause()方法后继续运行。
另请参阅该页面上提供的活动生命周期表:
突出显示的文字显示为
注意" Killable"上表中的列 - 对于那些被标记为可填充的方法,在该方法返回之后,托管该活动的进程可能在任何时候被系统杀死而不执行其代码的另一行。 因此,您应该使用onPause()方法将任何持久性数据(例如用户编辑)写入存储。
如果您执行的操作很重要,则应使用onPause()
而不是onStop()
。
希望这有帮助。