从Started Service到Activity连续发送值

时间:2018-06-08 09:28:33

标签: android android-intent android-service android-location

我有一个名为LocationService的Started服务,它每隔3秒检索一次设备的位置。我希望这些值显示在应用程序的UI上。为此,我需要将值传递回主要活动。

与活动的沟通需要是连续的,并且能够长期运行。

这样做的最佳方式是什么?我已经研究了绑定服务和本地广播,但我不确定哪个最适用于与UI的持续通信。

1 个答案:

答案 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()被命中时,更新的接收者将被取消注册。