[英]How is an Android Activity recreated when the screen is rotated?
我是Android新手。 我知道,當屏幕方向改變時,將重新創建Activity並再次調用onCreate()
。 但是,我在網上找不到的是原始活動被銷毀的確切程度。 如果onCreate()
調用的某些代碼正在運行中,該代碼只是停止,還是系統在旋轉屏幕並再次調用onCreate()
之前等待該代碼完成? 謝謝。
每當方向改變時,都會調用Activity的onCreate(),並且您應該處理異步任務,因為系統不會等待,但是您可以通過在Activity的AndroidManifest文件中添加Activity的configChanges屬性來避免Activity的重新創建標簽。
android:configChanges="keyboardHidden|orientation
”
旋轉屏幕時,我們將其稱為“配置更改”之一,其中包括諸如屏幕方向,鍵盤可用性和語言更改之類的情況。 如Android官方文檔所述,在此將先調用onDestroy()
然后再調用onCreate()
。
一些設備配置可以在運行時更改(例如屏幕方向,鍵盤可用性和語言)。 發生此類更改時,Android將重新啟動正在運行的Activity(先調用onDestroy(),再調用onCreate())。
但是,如果必須在主線程上執行任何代碼(而不是其他線程),Android將為您提供時間來保存活動數據,當活動重新啟動時,您可以在onCreate()
上接收該數據。 通過調用方法onSaveInstanceState()
來實現此目的,如本文檔中所述。
為了正確處理重啟,重要的是您的活動必須在正常的活動生命周期內恢復其先前狀態,在Android生命周期中,Android會在銷毀活動之前先調用onSaveInstanceState(),以便您可以保存有關應用程序狀態的數據。 然后可以在
onCreate()
或onRestoreInstanceState()
期間恢復狀態。
因此,活動中代碼的整個問題是,如果代碼在主線程上執行,它將等待代碼完成,並且如果代碼執行速度太慢,則可能會使配置更改非常緩慢,因為文檔中不鼓勵這樣做。主線程中的大量任務(例如http requests
)。
整個答案以及說明和引號均取自《 Android官方文檔指南》 ,您可以訪問它以獲取參考以及有關配置更改的更多說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.