睡眠后Android的活动生命周期

如果某个活动正在屏幕上显示并且有一个带有点击监听器的按钮,那么在onCreate方法期间它会附加到该按钮,然后设备进入睡眠模式(或者用户点击电源按钮关闭屏幕),当屏幕重新开启时,活动仍然可见,因为它在进入睡眠模式之前.

调用onResume,将其记录为活动生命周期的一部分.我不明白为什么onCreate不再被调用.在退出睡眠模式后,按钮的点击监听器甚至可以如何运行?您会认为Android已经破坏了附加到活动的所有正在运行的进程,其中包括按钮的单击侦听器.

你是什​​么意思,为什么不再调用onCreate()?

简单回答:当屏幕关闭时,您的活动不会被破坏,因此没有理由再次调用onCreate().

关闭手机屏幕后,将调用活动的onPause()回调,然后调用onStop().但是,仅仅因为它到达onStop()并不意味着它总是会到达onDestroy().至少根据我的理解,Android的操作系统试图尽可能多地使用其内存,以便应用程序可以更快地加载备份等(这是一个真正的过度简化,但我相信这是一般的想法).这意味着当屏幕熄灭时(至少在开始时),您的活动仍然存在于内存中.只有当系统真正需要您的活动所持有的资源时,它才会调用您的活动的onDestroy().这就是为什么当你关闭屏幕时你的按钮点击监听器仍然有效.您的活动仍然存在于内存中,这意味着您的按钮侦听器仍然已注册.

我认为重要的是要指出睡眠模式和关闭屏幕不是一回事.当您关闭屏幕时,它可能会或可能不会立即进入睡眠模式.当屏幕熄灭但它还没有进入睡眠模式时,cpu仍在工作,服务仍在运行.当手机进入睡眠模式时,它会关闭CPU,基本上“冻结”所有进程,因此所有服务也都会出现.使用唤醒锁可以防止手机进入睡眠模式,这就是为什么当手机的屏幕长时间关闭时服务仍会运行的原因.如果您尚未阅读,Service reference有一些非常好的信息.它还讨论了它的生命周期以及Android如何优先考虑其内存使用情况.

相关文章
相关标签/搜索