Android的onCreate在锁定屏幕后被调用

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

2
当屏幕方向改变或在较新版本的Android中屏幕大小改变时,将调用onCreate方法。如果没有发布任何代码或XML,很难确定为什么会发生这种情况。为了防止在某些应用程序中调用onCreate方法,我在那些不希望在屏幕方向或大小改变时调用onCreate方法的活动中添加了android:configChanges="keyboardHidden|orientation|screenSize" - HeatfanJohn
-1 的投票者在进行负面评价时应该添加评论,给出如何改进问题的关键反馈。 - HeatfanJohn
4个回答

8

对于我来说,我

android:configChanges="orientation"

但这并没有帮助,因为我的活动是全屏的,所以我添加了

android:configChanges="keyboardHidden|orientation|screenSize"

在活动标签中
自行处理配置更改中所述

如果您的应用程序不需要在特定配置更改期间更新资源,并且您具有需要避免活动重新启动的性能限制,则可以声明您的活动自行处理配置更改,从而防止系统重新启动您的活动。


这也是我的情况。 - realaboo
救命稻草。configChanges="orientation" 在我的平板电脑上可以工作,但在手机上不行。你的答案解决了这个问题。 - Rodia

3

如果活动处于横屏模式并且用户启用了锁定屏幕,则会发生这种情况。

这可能有两个原因:

  1. 如果启用了任何类型的锁定屏幕并且活动处于横屏模式: 如果设备的锁定屏幕为纵向模式,则在设备被锁定时,它会自动切换到纵向模式(即使您的活动处于横屏模式)。当设备被解锁时,您的活动变得可见,但它又从纵向(锁定时)转换为横向,因此活动被销毁并重新创建。

  2. 这是Android操作系统的工作方式,它决定何时销毁您的视图。当您锁定手机时,您的应用程序进入活动生命周期的暂停状态(onPause)。 当活动处于暂停状态并且占用大量内存时,系统有权杀死您的应用程序(先onStop再onDestroy)。因此,当您解锁时,系统调用(onCreate)以重新创建您的视图。

解决方案:

  1. 您应该仔细使用onSaveInstanceState()保存和检查状态,或者
  2. 在清单中的Activity标记中使用android:configChanges="orientation|screenSize"

1
这是Android操作系统的工作方式,它决定何时销毁你的视图。当你锁定手机时,你的应用程序进入活动生命周期的暂停状态(onPause)。
当一个活动处于暂停状态并且占用大量内存时,Android系统有权杀死你的应用程序(onStop)。
因此,在解锁时必须调用onCreate来重新创建你的视图。

1
当锁定屏幕时,它实际上会进入onPause,然后进入onStop - TronicZomB
我本以为你的应用程序会进入暂停状态 - user2336315
1
在系统想要销毁我的活动时调用onCreate似乎不太合逻辑... - user2224350
你有点是...我能理解你的意思和"它只是进入了onPause"的意思都可以被别人看到。我只是想澄清一下。 - TronicZomB
但不仅仅是调用onStop(),还会调用onDestroy()吗? - user2224350
你的回答在某些情况下也是正确的。但在这种情况下,锁定屏幕大多数情况下都是纵向模式,因此当设备被锁定并且Activity处于横向模式时,其方向会发生改变。因此它会被销毁并重新创建。 - AnujDeo

0

当屏幕返回到桌面时,onDestroy()方法被调用以关闭应用程序。

当屏幕返回并显示您的应用程序的第一个布局/视图时,它被称为onStop()和onCreate()。

当屏幕返回并显示与屏幕消失前相同的视图时,将调用onPause()和onResume()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接