onDestroy后,生命周期回调被重新调用

after onDestroy, the life cycle callbacks are re-called

我有一个带有 viewpager 和三个选项卡的主 activity,每个选项卡都有自己的片段布局。在三个片段中的每一个中,我都实现了生命周期 回调。在我按下关闭屏幕的按钮之前,该应用程序运行良好。当屏幕关闭时,我发现在 被破坏的三个片段被重新创建,onAttachonCreate、...等被再次调用,如下面的日志所示。

请告诉我为什么当我关闭屏幕时 onAttachonCreate、.....等会被重新调用?

logcat:

02-10 09:14:34.606 20109-20109/com.example.com.vpager_00 W/Frag_1: onPause()
02-10 09:14:34.606 20109-20109/com.example.com.vpager_00 W/Frag_2: onPause()
02-10 09:14:34.606 20109-20109/com.example.com.vpager_00 W/Frag_3: onPause()
02-10 09:14:34.606 20109-20109/com.example.com.vpager_00 W/MainActivity: onPause()
02-10 09:14:34.666 20109-20109/com.example.com.vpager_00 W/Frag_1: onStop()
02-10 09:14:34.666 20109-20109/com.example.com.vpager_00 W/Frag_2: onStop()
02-10 09:14:34.666 20109-20109/com.example.com.vpager_00 W/Frag_3: onStop()
02-10 09:14:34.666 20109-20109/com.example.com.vpager_00 W/MainActivity: onStop()
02-10 09:14:35.336 20109-20109/com.example.com.vpager_00 W/Frag_1: onDestroy()
02-10 09:14:35.336 20109-20109/com.example.com.vpager_00 W/Frag_2: onDestroy()
02-10 09:14:35.336 20109-20109/com.example.com.vpager_00 W/Frag_3: onDestroy()
02-10 09:14:35.336 20109-20109/com.example.com.vpager_00 W/MainActivity: onDestroy()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_1: onAttach()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_1: onCreate()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_2: onAttach()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/MainActivity: onFragRefHeld
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_2: onCreate()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_3: onAttach()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 V/Frag_3: getView(): null
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/Frag_3: onCreate()
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 V/Frag_3: getView(): null
02-10 09:14:35.456 20109-20109/com.example.com.vpager_00 W/MainActivity: onCreate()
02-10 09:14:35.466 20109-20109/com.example.com.vpager_00 W/Frag_1: onCreateView()
02-10 09:14:35.466 20109-20109/com.example.com.vpager_00 W/Frag_1: onViewCreated()
02-10 09:14:35.466 20109-20109/com.example.com.vpager_00 W/Frag_1: onActivityCreated()
02-10 09:14:35.466 20109-20109/com.example.com.vpager_00 W/Frag_2: onCreateView()
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 V/Frag_2: getView(): null
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 W/Frag_2: onViewCreated()
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 W/Frag_2: onActivityCreated()
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 W/Frag_3: onCreateView()
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 V/Frag_3: getView(): null
02-10 09:14:35.476 20109-20109/com.example.com.vpager_00 W/Frag_3: onViewCreated()  

这是正常的。当屏幕关闭时,Android 可以对任何可见的 activity 做任何它想做的事情,以回收资源并帮助设备在屏幕关闭时进入睡眠状态。您总是可以预料,如果某个应用对用户不可见,Android 可能会回收它占用的资源。

您应该始终准备好处理生命周期事件并在发生这种情况时恢复自己。