And*_*Dev 9 lifecycle android android-activity
如果某个活动正在屏幕上显示并且有一个带有点击监听器的按钮,那么在onCreate方法期间它会附加到该按钮,然后设备进入睡眠模式(或者用户点击电源按钮关闭屏幕),当屏幕重新开启时,活动仍然可见,因为它在进入睡眠模式之前.
onResume被调用,它被记录为活动生命周期的一部分.我不明白为什么onCreate不再被调用.在退出睡眠模式后,按钮的点击监听器甚至可以如何工作?您会认为Android已经破坏了附加到活动的所有正在运行的进程,其中包括按钮的单击侦听器.
你是什么意思,为什么不再被onCreate()调用?
简单的答案:当屏幕关闭时,您的 Activity 不会被破坏,因此没有理由onCreate()再次被调用。
当手机屏幕关闭时,onPause()将调用该活动的回调,然后调用onStop()。然而,仅仅因为它达到了onStop()并不意味着它总是会达到onDestroy()。至少据我了解,Android 操作系统试图尽可能多地使用内存,以便应用程序能够更快地加载备份,等等(这是一个真正的过度简化,但我相信这是总体想法)。这意味着当屏幕关闭时(至少在开始时),您的活动仍然存在于内存中。只有当系统确实需要您的活动所拥有的资源时,它才会调用您的活动的onDestroy(). 这就是为什么当您关闭屏幕时按钮单击侦听器仍然有效的原因。您的活动仍然存在于内存中,这意味着您的按钮侦听器也仍然已注册。
我认为重要的是要指出睡眠模式和关闭屏幕不是一回事。当您关闭屏幕时,它可能会也可能不会立即进入睡眠模式。当屏幕熄灭但尚未进入睡眠模式时,CPU仍在工作,服务仍在运行。当手机进入睡眠模式时,它会关闭 CPU,基本上“冻结”所有进程,因此所有进程services也都冻结。使用唤醒锁可以防止手机进入睡眠模式,这就是为什么当手机屏幕长时间关闭时服务仍会运行。如果您还没有阅读过,该Service参考文献 提供了一些非常好的信息。它还讨论了它的生命周期以及 Android 如何确定其内存使用的优先级。
| 归档时间: |
|
| 查看次数: |
7250 次 |
| 最近记录: |