我将Mapzen Lost api用于位置服务,将匕首用于依赖项注入,并进行了改装以获取设备当前位置的天气数据。我在尝试从lostLocationService创建回调时遇到问题,以便直到确认已找到位置后才发送改装请求。

我的问题是依赖关系。我有一个Presenter,它具有LocationService的依赖关系,并且具有LostLocationService的依赖关系。
我在LostLocationService类中有一个位置侦听器,在其中我重写了onLocationChanged()

LocationListener listener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        myLocationListener.onLocationFound();
    }
};

一切似乎都很好,但仅将回调公开给LostLocationService。每个依赖级别都需要回调吗?或更可能是我缺少了什么?

最佳答案

我也想知道是否应该注入听众,以及与他们打交道的最简单方法是什么。

对于您的情况,也许您应该考虑使用侦听器列表(如果可能)将事件调度到所有相关实例。如果每个侦听器都有明确定义的生命周期并且可以预测性地注册/注销,则此方法很好用。这样,您可以避免听众“级联”。

我不知道您的实现细节,但是我想您的LocationService充当抽象层吗?如果是这样,我会这样做:

  • 定义一个依赖于LostLocationService的LocationService。 LocationService将处理LostLocationService的所有详细信息。
  • LocationService侦听LostLocationService报告的事件。
  • LocationService具有一个动态增长的侦听器列表(您可以添加和删除它们)。
  • LocationService在需要时将主要事件报告给所有侦听器。

  • 我还将在这里使用一些接口,因为更改代码/稍后对其进行测试将更加容易。定义一个LocationProviderInterface,它公开一些实用程序功能(startService,stopService,addListener等)。另外,定义侦听器应实现的接口(似乎已经完成了)。

    另外,不要犹豫,详细说明您的第一点。

    我在尝试从中创建回调时遇到问题
    lostLocationService,以便不发送改装请求
    直到确认已找到位置。

    07-27 20:37