【问题标题】:Android make every activity get location information?Android让每个活动都获取位置信息?
【发布时间】:2016-09-14 20:29:19
【问题描述】:

在活动A中,我从A1和A2获得了2个片段,用户可以访问活动B和活动C。我的问题是,活动B和C都需要位置信息(如Lat,lng)。如何在正常的 UI 绘图中实现这一点而不会出现巨大延迟?

我有两个不成功的计划:

  1. 直接使用A获取位置,将值传给A1和A2,最后传给B和C。如果用户在室内,位置信息需要一段时间才能接收。如果用户在没有位置信息的情况下访问 B 和 C 怎么办?

  2. 使用服务。但是,我不需要长时间的位置识别,而且,即使服务可以向所有人发送广播,B和C可以在他们的onCreate()之前接收到广播消息吗?此外,广播需要一段时间才能接收,这会严重影响初始化。

【问题讨论】:

    标签: android android-activity service connection


    【解决方案1】:

    嘿,其实你有很多选择

    • 使用其中的 GoogleApiClient 创建绑定服务。将此服务绑定到您需要的活动并在其中接收数据。
    • 使用事件总线。使用 GoogleApiClient 创建类以获取位置,然后在您需要的活动/片段中捕获数据
    • 使用 Dagger2 将 GoogleApiClient @module 注入到您需要的活动/片段中。

    希望我能帮到你;)

    【讨论】:

    • 这很有帮助!非常感谢!我还有一个问题,在这三个选项中,哪一个最快?因为我需要根据它来绘制UI。
    • 我更喜欢使用 Service。因为事件不稳定,我的意思是任何带有接收器的类都可以获取数据,所以你不能确定你在想要的地方收到了它。服务非常简单:没有额外的库,即使应用程序被隐藏等情况下也可以运行它。所以我建议你使用它。希望对您有所帮助)
    • 服务和事件总线的组合怎么样?好像会解耦很多?
    • @LunarS 是的,如果您不想与 Messenger 打交道,这也是可能的解决方案
    • @LunarS 没问题 ;) 如果您有任何道具,请在此处评论。祝你好运
    【解决方案2】:

    考虑一下这个事件总线模式的实现。您唯一应该考虑的是通过 UI 线程执行器。

    http://square.github.io/otto/

    【讨论】:

    • 和广播很像,比广播接收器快吗?广播接收器可能需要很长时间才能接收到消息。
    • 另外,未初始化的activity能否在onCreate后接收发布的事件?
    • 该库使用反射来直接调用您订阅的方法,因此由于广播是由 Android 操作系统处理的,因此速度会快得多,这就是它们看起来很慢的原因。有一个特殊的@Provide 注解,用于通知新订阅的组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多