2010-06-03 79 views
2

從文檔中有關清單中的活動標籤的android:configChanges='orientation'屬性:處理方向更改自己

注意:使用此屬性,應避免使用,並僅作爲最後手段。請閱讀處理運行時更改以獲取有關如何正確處理由於配置更改而導致的重新啓動的更多信息。

爲什麼這麼說?

在通過服務API庫進行線程和網絡請求的情況下,可以通過引用原始活動來請求,然後可能發生方向更改,使線程指向舊的活動。

雖然這可以修復,但與自己處理配置更改相比,這是單調乏味的和醜陋的。

爲什麼要避免它?

編輯:我想我也應該問:這是一個可以接受的原因做自己的方向配置更改?

+0

任何人對此有任何意見? – synic 2010-06-04 16:10:46

回答

3

爲什麼這麼說?

因爲他們希望您閱讀文檔中的「處理運行時更改」部分。 :-)

在線程的情況下,和網絡經由服務API庫 請求,一個請求 可以與參考 到原始活動進行,然後可能會引起 取向變化, 離去線程指向舊的 活動。

對於您關心的旋轉,不使用到Activity(例如,定期的內部類),含蓄地提及案件,而是明確的方法(例如,靜態內部類)。 Here is a brand-spankin'-new sample project,證明我的意思。

雖然這可能是固定的,它是乏味 和相比,只是處理 配置更改自己的醜陋。

建議在那裏,我懷疑,因爲他們害怕Android的新手會搞砸「自己處理配置更改」。例如,他們決定爲景觀設計一些不同的字符串(在那裏你有更多的水平空間),並忘記重新加載它們。或者,他們決定爲景觀製作一些不同的圖像,並忘記重新加載它們。等等。

大多數應用程序中的大多數活動都不會有後臺線程或套接字或自己的任何東西,這可能是因爲他們不需要它們,或者是因爲別的東西在管理它們。,Service)。他們的破壞和重新創建的庫存實現通常是「正常工作」,特別是對於保存EditTexts等的小部件狀態的內置支持。

此外,您可能無法保存那麼多的「處理它自己」,因爲你仍然需要實現onSaveInstanceState()無論如何,處理比配置更改其他方案(例如,您的活動被剔除的RAM自由up space)。

現在,他們的措辭有點苛刻嗎?大概。經驗豐富的Android開發人員可以自行決定採用哪種輪換處理策略。我懷疑他們的口氣是試圖在進入這條路線之前試圖嚇唬新人兩次思考。

+0

謝謝,這是一個很好的解釋:-) – synic 2010-06-05 04:41:32

1

我同意,在某些情況下,看起來像是矯枉過正必須保存狀態並重新繪製視圖。我可以理解,如果要在方向更改時配置不同的佈局,除此之外,將其添加到我的活動中會更容易。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE) 
    || newConfig.equals(Configuration.ORIENTATION_PORTRAIT) 
    || newConfig.equals(Configuration.ORIENTATION_SQUARE) 
    || newConfig.equals(Configuration.ORIENTATION_UNDEFINED)) { 

} else { 
    super.onConfigurationChanged(newConfig); 
} 
}