繁体   English   中英

旋转屏幕时如何重新创建Android Activity?

[英]How is an Android Activity recreated when the screen is rotated?

我是Android新手。 我知道,当屏幕方向改变时,将重新创建Activity并再次调用onCreate() 但是,我在网上找不到的是原始活动被销毁的确切程度。 如果onCreate()调用的某些代码正在运行中,该代码只是停止,还是系统在旋转屏幕并再次调用onCreate()之前等待该代码完成? 谢谢。

每当方向改变时,都会调用Activity的onCreate(),并且您应该处理异步任务,因为系统不会等待,但是您可以通过在Activity的AndroidManifest文件中添加Activity的configChanges属性来避免Activity的重新创建标签。

android:configChanges="keyboardHidden|orientation

根据有关配置更改官方文档 ,一旦检测到设备旋转或首次启动活动,就会调用onCreate(); 您应该假设,出于所有意图和目的,onCreate()方法将在另一个屏幕旋转触发活动重新创建之前完成其执行。 在onCreate()中执行的任何代码都应立即完成,因为它不会阻塞您的UI。

旋转屏幕时,我们将其称为“配置更改”之一,其中包括诸如屏幕方向,键盘可用性和语言更改之类的情况。 如Android官方文档所述,在此将先调用onDestroy()然后再调用onCreate()

一些设备配置可以在运行时更改(例如屏幕方向,键盘可用性和语言)。 发生此类更改时,Android将重新启动正在运行的Activity(先调用onDestroy(),再调用onCreate())。

但是,如果必须在主线程上执行任何代码(而不是其他线程),Android将为您提供时间来保存活动数据,当活动重新启动时,您可以在onCreate()上接收该数据。 通过调用方法onSaveInstanceState()来实现此目的,如本文档中所述。

为了正确处理重启,重要的是您的活动必须在正常的活动生命周期内恢复其先前状态,在Android生命周期中,Android会在销毁活动之前先调用onSaveInstanceState(),以便您可以保存有关应用程序状态的数据。 然后可以在onCreate()onRestoreInstanceState()期间恢复状态。

因此,活动中代码的整个问题是,如果代码在主线程上执行,它将等待代码完成,并且如果代码执行速度太慢,则可能会使配置更改非常缓慢,因为文档中不鼓励这样做。主线程中的大量任务(例如http requests )。

整个答案以及说明和引号均取自《 Android官方文档指南》 ,您可以访问它以获取参考以及有关配置更改的更多说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM