当我在我的应用程序运行“置顶”时锁定屏幕,系统几乎立即调用onCreate(屏幕仍然是黑色)。这种破坏性行为的原因是什么?
对于我来说,我
android:configChanges="orientation"
但这并没有帮助,因为我的活动是全屏的,所以我添加了
android:configChanges="keyboardHidden|orientation|screenSize"
如果您的应用程序不需要在特定配置更改期间更新资源,并且您具有需要避免活动重新启动的性能限制,则可以声明您的活动自行处理配置更改,从而防止系统重新启动您的活动。
如果活动处于横屏模式并且用户启用了锁定屏幕,则会发生这种情况。
这可能有两个原因:
如果启用了任何类型的锁定屏幕并且活动处于横屏模式: 如果设备的锁定屏幕为纵向模式,则在设备被锁定时,它会自动切换到纵向模式(即使您的活动处于横屏模式)。当设备被解锁时,您的活动变得可见,但它又从纵向(锁定时)转换为横向,因此活动被销毁并重新创建。
这是Android操作系统的工作方式,它决定何时销毁您的视图。当您锁定手机时,您的应用程序进入活动生命周期的暂停状态(onPause)。 当活动处于暂停状态并且占用大量内存时,系统有权杀死您的应用程序(先onStop再onDestroy)。因此,当您解锁时,系统调用(onCreate)以重新创建您的视图。
解决方案:
onSaveInstanceState()
保存和检查状态,或者android:configChanges="orientation|screenSize"
。onPause
,然后进入onStop
。 - TronicZomB当屏幕返回到桌面时,onDestroy()方法被调用以关闭应用程序。
当屏幕返回并显示您的应用程序的第一个布局/视图时,它被称为onStop()和onCreate()。
当屏幕返回并显示与屏幕消失前相同的视图时,将调用onPause()和onResume()。
onCreate
方法。如果没有发布任何代码或XML,很难确定为什么会发生这种情况。为了防止在某些应用程序中调用onCreate
方法,我在那些不希望在屏幕方向或大小改变时调用onCreate
方法的活动中添加了android:configChanges="keyboardHidden|orientation|screenSize"
。 - HeatfanJohn