如何在旋转屏幕时重新创建Android活动?

时间:2017-11-25 23:37:30

标签: java android asynchronous android-activity

我是Android新手开发者。我知道当屏幕方向改变时,将重新创建活动并再次调用onCreate()。然而,我无法在网上找到的原始活动是如何被销毁的。如果onCreate()调用的某些代码正在运行,那么该代码是否会停止,或者系统是否在旋转屏幕并再次调用onCreate()之前等待该代码完成?感谢。

3 个答案:

答案 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,您可以访问它以供参考,并提供有关配置更改的更多说明。