我有舊的Android/java代碼,它包含兩個派生從IntentService
, 和這些服務而不是運行在單獨的進程。LiveData vs Handler and LocalBroadcast
問題是關於從這些IntentService
返回結果的方式。通過使用Handler
+ Runnable
,在主循環運行的代碼
一個服務返回結果:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
MyApplication.get().setFoo(someThing);
}
});
另一種是使用LocalBroadcastManager.getInstance(this).sendBroadcast(in);
要發送消息給Activity
,和Activity
經由BroadcastReceiver
在onResume
訂閱上的消息,並在退訂。
我說得對嗎,在這兩種情況下都可以使用LiveData
來簡化事情嗎?
IntentService
應該創建LiveData
,誰想要的結果應該observe
它, 和新數據到達時IntentService
應該叫postValue
, 或可能存在一些暗礁,防止LiveData
這裏使用?
你檢查了這一點: https://stackoverflow.com/questions/44204978/how-to-update-livedata-of-a-viewmodel-from-background-service-and-update-ui –
是的你可以這樣做 –
使用ResultReceiver進行Activity到IntentService的通信,可以在這些組件之間交換數據。它對替代解決方案很有用。 –