持续将 Started Service 中的值发送到 Activity
Continuously send values from Started Service to Activity
我有一个名为 LocationService 的 Started 服务,它每 3 秒检索一次设备的位置。我希望这些值显示在应用程序的 UI 上。为此,我需要将值传回 Main Activity。
与 Activity 的沟通需要持续进行,并且能够 运行 长期进行。
这样做的最佳方法是什么?我研究了 Bound Services 和 Local Broadcast,但不确定哪个最适用于与 UI 的连续通信。
经过大量研究和修改后,我发现使用 LocalBroadcastManager 适合持续更新到另一个 Activity。实施也很简单。
在服务 class 中更新值时,方法 updateUI()
将是 运行:
private void updateUI(String statusValue){
broadcastIntent.putExtra("status", statusValue);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
这会广播要由 Main 拾取的值 Activity
在 Main Activity 中,我添加了一个 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 只能在 activity 为 运行 时提供持续更新。当 onPause()
被点击时,更新的接收者被注销。
我有一个名为 LocationService 的 Started 服务,它每 3 秒检索一次设备的位置。我希望这些值显示在应用程序的 UI 上。为此,我需要将值传回 Main Activity。
与 Activity 的沟通需要持续进行,并且能够 运行 长期进行。
这样做的最佳方法是什么?我研究了 Bound Services 和 Local Broadcast,但不确定哪个最适用于与 UI 的连续通信。
经过大量研究和修改后,我发现使用 LocalBroadcastManager 适合持续更新到另一个 Activity。实施也很简单。
在服务 class 中更新值时,方法 updateUI()
将是 运行:
private void updateUI(String statusValue){
broadcastIntent.putExtra("status", statusValue);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
这会广播要由 Main 拾取的值 Activity
在 Main Activity 中,我添加了一个 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 只能在 activity 为 运行 时提供持续更新。当 onPause()
被点击时,更新的接收者被注销。