2011-11-08 21 views
6

我在處理AsyncTask和屏幕旋轉時仍試圖找到「正確」的設計模式。我讀this commonsware blog post鏈接到this code,但現在不推薦使用onRetainNonConfigurationInstance方法。文檔中的魔術語句「在切換到下一個活動期間保證沒有消息處理,簡化了活動對象的使用...」,這是該方法所做的真正關鍵部分。我沒有看到它使用setRetainInstance()能夠實現相同目標的建議。帶屏幕旋轉的AsyncTask - onRetainNonConfigurationInstance不推薦使用

我也看到帖子such as this one其頭號答案真的沒什麼缺點,只包括90%的用例(即如果你的任務正在運行,然後打來電話會發生什麼,該解決方案將不行)。

有人建議審查代碼爲here例子的AsyncTask,但除非我被密集的,我不認爲他們會被任何地方使用的應用程序(谷歌代碼使用search feature時)

這個問題有顯然被問過很多次,但我沒有看到一個最新的,適當的asnwer。如果存在的話,請回答並作爲重複關閉,但必須回答! :)

This is another link哪些評論相同,不贊成使用的方法。

+0

請參閱[我的答案](http://stackoverflow.com/a/12303649/265521)。還提出了['AsyncTaskLoader'](http://developer.android.com/reference/android/content/AsyncTaskLoader.html)。 – Timmmm

回答

1

它只在Honeycomb及以上版本上被棄用,並且它對那些也會很好用。 '新'方法是使用加載器(您可以使用兼容性庫來獲取HC之前的版本)或保留碎片。如果您調用setRetainInstance(),實例將按原樣傳遞給新創建的活動(它們實際上在兼容性庫的FragmentActivity中使用onRetainNonConfigurationInstance),因此它與您現在的實際效果相同。

+0

但即使我使用Object x = setRetainInstance(true),也存在我無法使用它的問題。我必須創建自己的setRetainInstance(),爲什麼? –

+0

@RajuGujarati什麼?你看過這個方法的簽名嗎? –

1

使用不推薦使用的方法沒有任何內在錯誤。如果你的AsyncTask非常關鍵,如果你的方向改變了,你不能取消它並重新啓動它,你應該考慮使用一項服務。