簡體   English   中英

旋轉屏幕時如何重新創建Android Activity?

[英]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

根據有關配置更改官方文檔 ,一旦檢測到設備旋轉或首次啟動活動,就會調用onCreate(); 您應該假設,出於所有意圖和目的,onCreate()方法將在另一個屏幕旋轉觸發活動重新創建之前完成其執行。 在onCreate()中執行的任何代碼都應立即完成,因為它不會阻塞您的UI。

旋轉屏幕時,我們將其稱為“配置更改”之一,其中包括諸如屏幕方向,鍵盤可用性和語言更改之類的情況。 如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM