我有一个名为LocationService的Started服务,它每隔3秒检索一次设备的位置。我希望这些值显示在应用程序的UI上。为此,我需要将值传递回主要活动。
与活动的沟通需要是连续的,并且能够长期运行。
这样做的最佳方式是什么?我已经研究了绑定服务和本地广播,但我不确定哪个最适用于与UI的持续通信。
答案 0 :(得分:0)
经过大量研究和修补后,我发现使用LocalBroadcastManager非常适合连续更新另一个Activity。实施也很直接。
在更新值时,在Service类中,将运行方法updateUI()
:
private void updateUI(String statusValue){
broadcastIntent.putExtra("status", statusValue);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
这会广播主要活动
所选择的值在主要活动中,我添加了一个BroadcastReceiver来获取这些频繁的更新:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String brStatus = intent.getStringExtra("status");
if(brStatus != null){
//Do something
}
}
}
};
我会注意到LocalBroadcastManager只能在活动运行时提供连续更新。当onPause()
被命中时,更新的接收者将被取消注册。