這裏是我試圖解決了三天的問題:處理後臺任務和活動配置更改
例如,REST客戶端應用程序同名但很多後臺工作(網絡電話)和帖子結果返回給用戶界面線。很明顯,它應該是異步完成的。 Android允許以多種方式完成此操作(例如AsyncTasks和IntentServices)。
從活動運行異步任務的最大問題是配置更改。 例如,我們有在AsyncTask中開始下載過程的活動並顯示ProgressDialog。屏幕旋轉後,操作系統正在重新創建活動。當asynctask試圖解除舊的(死亡)活動的進度對話時,結果就會失敗。
有幾種解決方案,這一問題:
第一個是保留工人片段的AsyncTask:偉大的職位如何做到這一點是here。大的優勢這個解決方案是OS知道何時調用onPostExecute()方法。在某些情況下onPostExecute()可能會在舊活動被銷燬並且還沒有創建新活動時被調用。但是這並沒有發生,因爲OS在onAttach()被調用之前不允許執行onPostExecute()。 缺點是AsyncTasks不適合長期操作,並且根據操作系統版本的不同而表現不同。
第二種方法是使用LocalBroadcastManager和IntentService。這是另一個post,它顯示瞭如何使用它。 如果服務在未註冊(重新創建活動的那一刻)將消息發送給BroadcastReceiver時會發生什麼情況?
第三個解決方案是骯髒的黑客:在mainfest
android:configChanges="keyboardHidden|orientation"
中聲明這個。不適合我。
也許有人知道另一種解決方案?