2013-10-16 50 views
2

我對用戶設備旋轉時被破壞並重新創建的Activity有點困惑。在屏幕旋轉/活動破壞後在Android中保持數據視圖/佈局

我一直在看四周,我明白這樣做的理由(這基本上是「力量」的開發,以確保他們沒有「錯過」時旋轉/語言/其他變化的任何東西)

我很高興尊重最佳做法,但如果它被視爲是這樣的話,但它引出了一個問題:

我該如何'記住'遊戲/應用程序的狀態,以便當屏幕旋轉時,我有東西從中重新產生用戶在看什麼?

從我所看到的,絕對一切都被銷燬,基類構造函數運行,並且Activity中的所有變量都爲'null'。

我懷疑「savedInstanceState」(Bundle類),我會收集這些數據,但閱讀各地似乎只被使用時,應用程序是由缺乏資源的關閉(以及一些其他極端邊緣案件)

我誤解或誤解了savedInstanceState的目的?如果我足夠謹慎,在輪換時不會錯過任何事情,放棄最佳做法(讓Activity被銷燬)是明智的嗎?提前感謝您的任何建議。

我應該注意到這個問題,適用於遊戲編程(我不使用佈局XML)

+0

最佳實踐並不總是最佳的..你想讓你的活動被重新創建嗎?你想做旋轉工作嗎? savedInstanceState是存儲要傳遞給Activity重新創建的數據的位置,但由於您沒有使用XML佈局,因此可以考慮在清單中的activity中添加「android:configChanges =」orientation「'。這會讓你手動控制旋轉變化過程中發生的情況。 – JustinMorris

+0

我想要重新創建「活動」嗎?不是真的,如果我能避免它。除了可能更新遊戲UI以適應風景/肖像(如果Activity未被銷燬,這將變得必要)之外,沒有任何工作要做。 **可以公平地說,一個不使用XML佈局的遊戲(直接繪製到畫布上)應該通常使用'android:configChanges ='orientation'方法嗎?** – 1owk3y

+0

嗨Justin。我現在正在使用您的解決方案,它的工作方式就像一種享受。我認爲給你提供正確答案是公平的。請發表您的評論(或類似的)作爲答案,我會給你正確的標記:) – 1owk3y

回答

2

你需要你的活動將重現?你想做旋轉工作嗎? savedInstanceState是存儲要傳遞給Activity重新創建的數據的位置,但由於您未使用XML佈局,因此可以考慮在清單中的activity中添加android:configChanges =「orientation」。這會讓你手動控制旋轉變化過程中發生的情況。

在另外我原來的評論,我將會覆蓋鍵盤是顯示配置變化​​以及:

android:configChanges="orientation|keyboardHidden" 

如果你想要做的旋轉變化,您可以覆蓋onConfigChange,做任何你需要工作那裏。

很難說有時候應該總是重寫配置更改,但是當我不依賴於大小或方向特定的資源文件夾時,我經常這樣做,我正在做很多工作,會花費太多時間來重新創建。

+0

謝謝你。實際上,我期待着在使用畫布佈局時使應用自適應的很多工作,所以沒關係。從我讀到的內容來看,它聽起來像是一個總體上不好的主意,爲了取向而重寫configChanges,但現在應用程序已經完美運行,所以再次感謝! – 1owk3y

0

在活動配置更改時存儲數據還有其他最佳實踐。

1. Developer Doc Handling Runtime Changes
2. Alex Lockwood : Handling Configuration Changes with Fragments,這將回答你所有的問題,並拒絕配置更改和存儲數據。

impt: 片段文件來存儲數據。您必須設置setRetainInstace(true)才能存儲數據並在活動配置更改時進行檢索。

@Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);   
      // retain this fragment 
      setRetainInstance(true);  
    } 
相關問題