我是一名新手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. 當屏幕旋轉
- 3. 在屏幕旋轉時重新創建AlertDialog的最佳方式是什麼?
- 4. 重新創建iPad主屏幕圖標旋轉/定位效果
- 5. 當屏幕旋轉時重新啓動活動
- 6. 當Android屏幕旋轉時執行一項新任務
- 7. 的Android旋轉器旋轉屏幕
- 8. Android屏幕旋轉問題
- 9. 屏幕旋轉
- 10. 屏幕旋轉
- 11. 如何在屏幕旋轉時重新排列UI元素
- 12. 當屏幕旋轉時,佈局改變
- 13. android中的屏幕旋轉
- 14. 當我旋轉手機時,活動屏幕不旋轉
- 15. Dialog在屏幕旋轉時關閉android
- 16. 旋轉android屏幕時的Genymotion錯誤
- 17. 啓用屏幕旋轉android
- 18. 的CollectionView是屏幕旋轉
- 19. Android:屏幕小於x時禁用屏幕旋轉
- 20. 屏幕旋轉
- 21. 如何預防的WebView自動刷新,當屏幕旋轉
- 22. WindowsAndroid:如何旋轉屏幕?
- 23. Android:如何在方向更改時重新創建Activity?
- 24. 的Android - 片段屏幕旋轉
- 25. Android:旋轉後錯誤的ViewPager屏幕
- 26. 屏幕旋轉
- 27. 旋轉屏幕
- 28. Android上的簡單屏幕旋轉
- 29. 當Android主屏幕旋轉時,不會調用小部件onUpdate()
- 30. 在Android中使用MediaPlayer旋轉屏幕時音樂停止
你對我的回答滿意嗎?如果你還想要更多的細節,請在下面留言......!或者如果你還沒有理解任何東西! – Xenolion