0

這裏是我試圖解決了三天的問題:處理後臺任務和活動配置更改

例如,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"中聲明這個。不適合我。

也許有人知道另一種解決方案?

回答

0

您可以在setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)任務之前阻止屏幕方向並在之後進行恢復。

其他的想法是服務。你擔心當一個方向關閉時,另一個方向被加載時,你可能會錯過廣播。在這種情況下,服務應該將數據存儲在新的活動可以加載的地方。 (SqlLite,文件,sharedPrefs)

另請注意broadcastRecievers可以在清單中註冊。所以永遠在線,可以這麼說。

相關問題