我是Android新手开发者。我知道当屏幕方向改变时,将重新创建活动并再次调用onCreate()
。然而,我无法在网上找到的原始活动是如何被销毁的。如果onCreate()
调用的某些代码正在运行,那么该代码是否会停止,或者系统是否在旋转屏幕并再次调用onCreate()
之前等待该代码完成?感谢。
答案 0 :(得分:0)
当方向发生变化时,每次调用Activity的onCreate(),你应该处理异步任务,因为系统不会等待,但你可以通过在AndroidManifest文件中添加Activity的configChanges属性来避免重新创建Activity在活动标签中。
android:configChanges="keyboardHidden|orientation
“
答案 1 :(得分:0)
根据official documentation on configuration changes,一旦检测到设备轮换或第一次启动活动,就会调用onCreate();你应该假设,对于所有意图和目的,onCreate()方法将在另一个屏幕旋转触发活动重新创建之前完成其执行。你的onCreate()中执行的任何代码都应该立即完成,因为它不应该阻止你的UI。
答案 2 :(得分:-1)
当旋转屏幕时,我们将其称为配置更改之一,它包括屏幕方向,键盘可用性和语言更改等情况。从Android官方文档中引用onDestroy()
,然后onCreate()
。
某些设备配置可能会在运行时更改(例如屏幕方向,键盘可用性和语言)。当发生这样的更改时,Android会重新启动正在运行的Activity(调用onDestroy(),然后调用onCreate())。
但是如果在主线程上执行的任何代码都必须完成(而不是其他线程),并且Android会让您有时间保存活动重新启动时可以在onCreate()
上收到的活动数据。它通过调用方法onSaveInstanceState()
来调用方法,如文档中所述。
要正确处理重新启动,您的活动必须通过正常的Activity生命周期恢复其先前的状态,在此生命周期中Android会在销毁活动之前调用onSaveInstanceState(),以便您可以保存有关应用程序状态的数据。然后,您可以在
onCreate()
或onRestoreInstanceState()
期间恢复状态。
因此,活动中代码的全部问题是,如果代码在主线程上执行,它将等待代码完成,如果代码占用太慢,可能会使配置更改变得非常慢,因为它不鼓励用于在主线程中执行大量任务的文档(例如http requests
)。
此完整的答案,说明和引用取自Android Official Documentation Guide,您可以访问它以供参考,并提供有关配置更改的更多说明。