【问题标题】:How should I go about getting Context in this case?在这种情况下,我应该如何获取上下文?
【发布时间】:2011-08-22 11:27:40
【问题描述】:

我必须在accelerometercompass 等传感器之上设计一个Sensor Manager 类。这个项目将是一个class library 项目,将在其他需要来自传感器的数据的android 项目中被引用和使用设备。问题是,为了在我的Sensor Manager 类中使用accelerometercompass 之类的设备,我需要Context。我不知道在这种情况下如何访问当前上下文。

我应该要求我的Sensor Manager 的调用者/用户在某些方法的参数中传递Context 吗?如果有多个课程或活动使用我的传感器管理器怎么办?实际上我只会使用一个上下文,会不会引起问题?

或者是否有任何简单、安全和可靠的方法来获取当前应用程序的上下文?

更新

这是我目前的设计...

我已经为 SensorManager 以及 SensorManager 中的每个设备实现了单例。例如,SensorManager 中只有一个 Accelerometer 实例。调用者将获取 SensorManager,然后调用方法 RegisterForAccelerometer。因此,只要 SensorManager 的 Accelerometer 实例内的 Accelerometer 坐标有任何更新,所有注册的调用者都会收到通知。现在,当我第一次尝试开始监听加速度计的坐标时,问题就来了,因为我需要上下文。

【问题讨论】:

    标签: android android-context


    【解决方案1】:

    在我看来,您必须传递正在使用这些设备的特定 Activitycontext。我假设您没有将这些课程设置为Singleton

    另外,如果您想将课程设为singleton,我想您可以通过Application context 而不是Activity context,但我不确定这是否可行。

    更新:

    请参阅此Application 上下文http://developer.android.com/reference/android/app/Application.html

    通常不需要子类化应用程序。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单例需要全局上下文(例如注册广播接收器),则可以为检索它的函数提供一个 Context,该上下文在首次构造单例时在内部使用 Context.getApplicationContext()。

    所以无论你在哪个Activity你都会通过这个Applicationcontext

    【讨论】:

    • 如何在 SensorManager 类中获取应用程序上下文?
    • 我已经尝试了所有方法,但在我的情况下没有任何效果,因为单独的类库项目需要上下文。你有运行它的代码或代码吗?
    【解决方案2】:

    一个上下文对你来说是不够的。取决于您的实现和需求,您可能希望将上下文存储在地图中或仅用于特定操作,因此这将影响传递此上下文的方法和时间。

    我可以粗略地说,如果您使用它来构造一个将使用上下文的新对象,或者如果您有一个单例,请在此调用中请求上下文,如果您创建类的多个实例,请将其传递给构造函数/工厂方法。

    【讨论】:

    • 我已经用设计细节更新了这个问题。请看一下。设计不正确是因为我试图使用一个上下文来监听多个客户/呼叫者?
    • @MByD -1,看不出多上下文的任何原因 - 这是一个巨大的泄漏可能性。它应该由一个 ApplicationContext.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2011-01-17
    • 2022-07-22
    相关资源
    最近更新 更多