锁定屏幕后调用Android onCreate

问题描述:

当我的应用在“顶部”运行时锁定屏幕时,系统几乎立即调用onCreate(屏幕仍为黑色)。这种破坏行为的原因是什么?锁定屏幕后调用Android onCreate

+1

当屏幕方向发生变化时,会调用onCreate,当屏幕尺寸发生变化时,将调用Android的更高版本。很难说没有发布任何代码或XML,为什么会发生这种情况。要停止在我的一些应用程序中调用onCreate',我在屏幕方向或大小改变时调用了'android:configChanges =“keyboardHidden | orientation | screenSize”'来调用我不想调用'onCreate'的活动。 – HeatfanJohn 2013-05-01 14:35:37

+0

+1 Downvoters应该添加一条评论,提供关于如何改善问题时的重要反馈,当downvoting时。 – HeatfanJohn 2013-05-01 14:37:35

这是Android操作系统的工作原理,它决定何时销毁您的视图。当您锁定手机时,您的应用会进入活动生命周期的暂停状态(onPause)。

当活动处于暂停状态,如果它需要大量的内存,Android系统已经干掉你的应用程序(的onStop)的权利。

所以它必须调用onCreate重新创建您的视图,当你解锁它。当后屏幕会返回你看到桌面上(的onDestroy()关闭应用程序)

+1

当锁定屏幕时,它实际上进入'onPause',然后到'onStop'。 – TronicZomB 2013-05-01 14:35:33

+0

我虽然我的意思是说你的应用程序进入暂停状态 – user2336315 2013-05-01 14:36:44

+1

调用创建时系统要摧毁我的活动似乎不是很合乎逻辑... – user2224350 2013-05-01 14:39:04

的onDestroy()被调用。

屏幕之后又回来了,你看到你的应用程序的第一个布局/视图,然后这就是所谓的onStop()和的onCreate()。

后,屏幕又回来了,你看到屏幕前的相同观点得好快的onPause()和onResume()被调用。

对于我来说,我

android:configChanges="orientation" 

但这并没有帮助,因为我的活动是全屏,所以我在活动标签

添加

android:configChanges="keyboardHidden|orientation|screenSize" 

正如上文Handling the Configuration Change Yourself

如果y我们的应用程序不需要在特定配置更改期间更新资源,并且您有一个性能限制,要求您避免重新启动活动,然后您可以声明您的活动处理配置更改本身,从而防止系统重新启动活动。

+0

这也是我的情况。 – realaboo 2016-05-20 13:05:49

+0

拯救生命。 configChanges =“orientation”在我的平板电脑上工作,但不在电话上。你的答案解决了这个 – Rodia 2017-02-22 16:44:16

这种情况如果活动是风景模式和锁定屏幕是由用户启用。

可以有这背后有两个原因:

  1. 如果任何类型的锁屏启用并活动在风景模式: 如果设备在人像模式中,锁定屏幕时,该设备已被锁定它会自动切换到肖像模式(即使您的活动处于风景模式)。当设备解锁时,您的活动变得可见,但它仍然从肖像(锁定时)转换到横向,因此活动将被销毁并重新创建。

  2. 这是Android操作系统是如何工作的,它决定何时摧毁你的看法。当您锁定手机时,您的应用会进入活动生命周期的暂停状态(onPause)。 当活动处于暂停状态时,如果需要大量内存,则系统有权终止您的应用(onStop,然后是onDestroy)。所以当你解锁它时,系统调用(onCreate)来重新创建你的视图。

解决方案:

  1. 你应该仔细保存和使用onSaveInstanceState()
  2. 使用android:configChanges="orientation|screenSize"中体现你的活动标签检查状态。