我有一個長時間運行的計算,它將傳感器數據作爲參數。請求後臺任務在Android中運行多次
得到計算結果後,我想調用一個方法來更新視圖。
此計算可能需要一些時間,因此我無法在Activity代碼中運行它,因爲UI線程凍結或減慢了傳感器數據。
由於我想在每次接收新傳感器數據時都運行此計算,因此Android提供了哪些選項?我試過使用AsyncTask。我將啓動一個AsyncTask以使用新的傳感器數據運行計算,並且View的更新方法將在其onPostExecute
內被調用。
不幸的是這種方法產生的問題與動畫同步:一個的AsyncTask之後的下一個可以完成,並在視圖的更新將被調用與過時信息,有效地使得其動畫風聲鶴唳。
我也嘗試運行相同的AsyncTask與executeOnExecutor
,將單線程執行程序傳遞給它,但這並沒有停止動畫抖動。
最後,我嘗試在MainActivity內運行帶有ResultReceiver回調的IntentService。雖然我能夠運行它,但它只運行一次。 我誤解了IntentServices的用途嗎?我似乎無法多次運行它(使用創建具有額外參數的意圖的方法並使用它調用startService
)。
摘要:我有一個緩慢的方法,對傳感器數據進行操作。每次獲取新的傳感器數據時,我都想在後臺運行它,並使用其結果/響應來更新View。
有什麼建議嗎?
使用的Rx的Java更新它的用戶界面和異步任務一樣工作,效果更好 –