2017-11-25 150 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,您可以訪問它作爲參考和更多配置更改的說明。