0

我知道何時改變方向android除非我們處理了方向改變,否則Android會銷燬並重新創建當前活動。當下面的生命週期方法取向的變化被調用爲什麼Android的生命週期方法調用兩次,當土地改爲港口?

protected void onSaveInstanceState(Bundle outState) 
protected void onStop() 
protected void onDestroy() 
public void onCreate(Bundle savedInstanceState) 
protected void onStart() 
protected void onRestoreInstanceState(Bundle savedInstanceState) 
protected void onResume() 

我的問題是,爲什麼這些方法獲取調用兩次,當我從橫向變成縱向和只有一次,當我從縱向切換到橫向。

+0

因爲當方向改變時,Android系統會重新創建您的活動或您的片段,所以您應該使用savedInstanceState來保存活動或片段由操作系統重新創建時所需的一些值。 – wSakly 2014-06-03 15:37:52

回答

0

它可能是模擬器中的某種錯誤,它不會在真實設備上發生。

2

退房Activity API - Configuration Changes,它應該回答你所有的問題。

如果設備的配置(由Resources.Configuration類定義)發生更改,則顯示用戶界面的任何內容都需要更新以匹配該配置。由於Activity是與用戶交互的主要機制,因此它包含對處理配置更改的特殊支持。

除非您另行指定,否則配置更改(例如屏幕方向,語言,輸入設備等的更改)將導致您的當前活動被銷燬,通過onPause()的正常活動生命週期過程,onStop ()和onDestroy()。如果活動處於前臺或對用戶可見,則在該實例中調用onDestroy()後,將創建一個活動的新實例,其中前一個實例從onSaveInstanceState(Bundle)生成的任何savedInstanceState都會創建。

這樣做是因爲任何應用程序資源(包括佈局文件)都可以根據任何配置值進行更改。因此,處理配置更改的唯一安全方法是重新檢索所有資源,包括佈局,可繪製和字符串。因爲活動必須已經知道如何保存其狀態並從該狀態重新創建自己,所以這是通過新配置使活動自行重新啓動的便捷方式。

在某些特殊情況下,您可能希望根據一種或多種類型的配置更改繞過重新啓動活動。這是通過清單中的android:configChanges屬性完成的。對於任何類型的配置更改,如果您在那裏處理,則會接到對當前活動的onConfigurationChanged(配置)方法的調用,而不是重新啓動。但是,如果配置更改涉及任何您不處理的活動,則該活動仍將重新啓動,並且不會調用onConfigurationChanged(Configuration)。

相關問題