我是一名新手Android开发人员。我知道当屏幕方向改变时,活动被重新创建并且再次调用onCreate()
。然而,我在网上找不到的是原始活动如何被破坏。如果一些由onCreate()
调用的代码处于运行中,该代码是否停止,或系统是否等待该代码完成,然后再旋转屏幕并再次调用onCreate()
?谢谢。当屏幕旋转时,Android Activity是如何重新创建的?
回答
当方向发生变化时,每次调用Activity的onCreate()方法时,由于系统没有等待,所以您应该照顾您的异步任务,但您可以通过在您的AndroidManifest中添加Activity的configChanges属性来避免重新创建Activity文件在活动标签中。
android:configChanges="keyboardHidden|orientation
“
“你应该照顾你的异步任务,因为系统不会等待”:我正在谈论我在UI线程上运行的同步任务。 –
你不应该在ui线程中运行任务:) – diegoveloper
按照official documentation on configuration changes,一旦检测到设备旋转或活动开始的第一次,的onCreate()被调用,你应该假设所有意图和目的的onCreate()方法将在另一个屏幕旋转触发活动重新创建之前完成其执行任何在onCreate()中执行的代码都应该立即完成,因为它不应该阻止你的用户界面
旋转屏幕时,我们称之为配置更改,它包括诸如屏幕方向,键盘可用性和语言变化等情况。从Android官方引用这里的文件onDestroy()
将被称为onCreate()
。
某些设备配置在运行时可能会发生变化(如屏幕方向,键盘可用性和语言)。当发生这种变化时,Android会重新启动正在运行的Activity(onDestroy()被调用,然后是onCreate())。
但是,如果有主线程上执行任何代码都必须完成(而不是其他线程)和Android给你时间,以节省您可以接收onCreate()
重新启动活动时的活动数据。它通过调用方法onSaveInstanceState()
来调用方法,如文档中所述。
要正确处理重新启动,但重要的是你的活动通过正常的活动周期,其中Android把的onSaveInstanceState(恢复以前的状态),它会破坏你的活动之前,这样就可以节省约应用程序的状态数据。然后您可以在
onCreate()
或onRestoreInstanceState()
期间恢复状态。
所以整个的活动代码的问题是,它会等待代码,如果它是在主线程上执行,如果代码服用过慢,可能使配置变化非常缓慢,因为它是完成在文档中不鼓励在主线程中执行大量任务(例如http requests
)。
这整个答案和描述和报价取自Android Official Documentation Guide,您可以访问它作为参考和更多配置更改的说明。
- 1. Android的屏幕旋转
- 2. 当Android屏幕旋转时执行一项新任务
- 3. Android屏幕旋转问题
- 4. 屏幕旋转
- 5. 如何在屏幕旋转时重新排列UI元素
- 6. android中的屏幕旋转
- 7. 旋转android屏幕时的Genymotion错误
- 8. 的CollectionView是屏幕旋转
- 9. 的Android - 片段屏幕旋转
- 10. Android:旋转后错误的ViewPager屏幕
- 11. 旋转屏幕
- 12. 当Android主屏幕旋转时,不会调用小部件onUpdate()
- 13. 在Android中使用MediaPlayer旋转屏幕时音乐停止
- 14. 在Android手机上重新排列UI在屏幕旋转上
- 15. 禁用屏幕旋转在Android如上
- 16. 如何重新创建Android 4.0锁屏
- 17. 如何让Android的布局是相同的,当我们旋转屏幕
- 18. Android + Flash屏幕旋转问题
- 19. SupportFragmentManager,popbackstack和屏幕旋转
- 20. Android模拟器 - 屏幕旋转
- 21. iOS屏幕旋转
- 22. 屏幕旋转RuntimeError
- 23. 如何在旋转屏幕时保持android搜索对话框?
- 24. 在Linux/Lakka启动时旋转屏幕
- 25. UIWebView接管屏幕旋转
- 26. 更新屏幕旋转的UITabBar宽度
- 27. 如何强制旋转iOS的屏幕?
- 28. 坚持屏幕旋转的意见
- 29. Android无法检测屏幕旋转
- 30. 多个DatePicker,当屏幕旋转时强制关闭
你对我的回答满意吗?如果你还想要更多的细节,请在下面留言......!或者如果你还没有理解任何东西! – Xenolion