持续将 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() 被点击时,更新的接收者被注销。