我想執行相對較短(最多2-3秒)的背景任務,同時向用戶顯示ProgressDialog
(我想在任務開始時顯示ProgressDialog
並在最後解除它)。什麼是在後臺工作中處理配置更改的最新方法?
我已經嘗試了幾種方法,但他們都有缺點,我無法正確解決。
我曾嘗試:
AsyncTask
的內存泄漏問題可以通過使用來解決一個
WeakReference
(持有參考Activity
),但我不能叫回新的Activity
實例是否在任務運行時重新創建實例(例如在方向更改的情況下)。AsyncTask
裹着一具無頭Fragment
:Commiting的
onCreate()
外Fragment
交易經常給我Can not perform this action after onSaveInstanceState
IllegalStateException
。使用commitAllowingStateLoss()
感覺不太合適。在
onCreate()
中加入Fragment
意味着即使我根本不需要它,它也會附加到Activity
,這感覺就像一個巨大的矯枉過正。這是一個痛苦的屁股實施,例如,如果我有幾個
AsyncTask
s。我必須創建一個巨大的Fragment
,其中包含幾個AsyncTask
內部類,這種感覺不對,或者爲每個任務創建單獨的Fragments
,這很難管理並導致代碼混淆。IntentService
+LocalBroadcastManager
我的這種方法的問題是,即使我登記我的接收器儘可能早地(在
onCreate()
,並註銷其在onDestroy()
),它仍然是可能的方向在廣播來在onDestroy()
之後和onCreate()
之後改變,,所以我想念廣播。(持久廣播已被棄用,不應該根據谷歌使用)
我真的不明白,爲什麼谷歌是那麼的難來處理配置更改。
我應該如何正確地做到這一點?
在此先感謝。