2017-11-25 160 views
1

我是一名新手Android开发人员。我知道当屏幕方向改变时,活动被重新创建并且再次调用onCreate()。然而,我在网上找不到的是原始活动如何被破坏。如果一些由onCreate()调用的代码处于运行中,该代码是否停止,或系统是否等待该代码完成,然后再旋转屏幕并再次调用onCreate()?谢谢。当屏幕旋转时,Android Activity是如何重新创建的?

+0

你对我的回答满意吗?如果你还想要更多的细节,请在下面留言......!或者如果你还没有理解任何东西! – Xenolion

回答

0

当方向发生变化时,每次调用Activity的onCreate()方法时,由于系统没有等待,所以您应该照顾您的异步任务,但您可以通过在您的AndroidManifest中添加Activity的configChanges属性来避免重新创建Activity文件在活动标签中。

android:configChanges="keyboardHidden|orientation

+0

“你应该照顾你的异步任务,因为系统不会等待”:我正在谈论我在UI线程上运行的同步任务。 –

+0

你不应该在ui线程中运行任务:) – diegoveloper

0

按照official documentation on configuration changes,一旦检测到设备旋转或活动开始的第一次,的onCreate()被调用,你应该假设所有意图和目的的onCreate()方法将在另一个屏幕旋转触发活动重新创建之前完成其执行任何在onCreate()中执行的代码都应该立即完成,因为它不应该阻止你的用户界面

-1

旋转屏幕时,我们称之为配置更改,它包括诸如屏幕方向,键盘可用性和语言变化等情况。从Android官方引用这里的文件onDestroy()将被称为onCreate()

某些设备配置在运行时可能会发生变化(如屏幕方向,键盘可用性和语言)。当发生这种变化时,Android会重新启动正在运行的Activity(onDestroy()被调用,然后是onCreate())。

但是,如果有主线程上执行任何代码都必须完成(而不是其他线程)和Android给你时间,以节省您可以接收onCreate()重新启动活动时的活动数据。它通过调用方法onSaveInstanceState()来调用方法,如文档中所述。

要正确处理重新启动,但重要的是你的活动通过正常的活动周期,其中Android把的onSaveInstanceState(恢复以前的状态),它会破坏你的活动之前,这样就可以节省约应用程序的状态数据。然后您可以在onCreate()onRestoreInstanceState()期间恢复状态。

所以整个的活动代码的问题是,它会等待代码,如果它是在主线程上执行,如果代码服用过慢,可能使配置变化非常缓慢,因为它是完成在文档中不鼓励在主线程中执行大量任务(例如http requests)。

这整个答案和描述和报价取自Android Official Documentation Guide,您可以访问它作为参考和更多配置更改的说明。