代码之家  ›  专栏  ›  技术社区  ›  Andrew

最巧妙的方式使用广播接收器在单台及更多

  •  2
  • Andrew  · 技术社区  · 14 年前

    我有一个singleton,它存储了一些关于我的应用程序用户的谨慎信息。目前,它存储用户的登录名和用户的位置。

    1) 该位置通过服务找到。目前,服务直接引用我的单例来填充经度和纬度。我想用一个广播接收器发送一个singleton听到并用来更新值的广播。

    但是,要注册广播接收器,我需要在我的singleton中有一个上下文。实现我想要的最巧妙的方法是什么?BroadcastReceiver是否可能不是适当的对象?

    2) 另外,我在使用单例时会遇到什么问题?我假设Android可能会在任何给定的时间回收这个内存(这显然是不好的);那么我该如何防止呢?在应用程序的上下文中传递并将其存储在成员变量中会阻止这种情况吗?

    android文档指出:“但是,静态的生命周期在您的控制之下并不好;因此为了遵守生命周期模型,应用程序类应该在应用程序类的onCreate()和onterminate()方法中启动和删除这些静态对象”,但我不是Entirel你知道如何做到这一点。

    1 回复  |  直到 14 年前
        1
  •  5
  •   CommonsWare    14 年前

    但是,要注册广播接收器,我需要在我的singleton中有一个上下文。什么是 最巧妙的方法来实现我想要的。BroadcastReceiver是否可能不是适当的对象?

    “最巧妙的方法”是不做你正在做的事。请只注册A BroadcastReceiver 来自 Activity , Service 也许吧 Application . 你 必须 注销此 广播接收机 活动 , 服务 应用 被摧毁。

    我假设Android可能在任何给定时间回收这个内存(这将 显然是坏的);那我怎么能阻止呢?

    您没有。Android保留随时终止您的进程的权利(例如,回收内存)。Android2.1及更高版本上的任务杀手将随时终止您的进程。一旦应用程序的所有组件都被销毁,Android可以随时回收您的进程,同时清除您的堆。等等。

    把你不介意失去的东西记在心里。

    最好将您的“应用程序”视为松散耦合组件的篮子,而不是整体实体。

    将传入应用程序的上下文并将其存储在成员变量thwart中 这个?

    不。

    android文档指出:“但是,静态的生命周期并不在您的 控制;因此为了遵守生命周期模型,应用程序类应该启动和 在 应用程序类”,但我不完全确定如何完成这一点。

    创建的子类 应用 并在清单中指出Android应该使用它,通过 android:name 属性 <application> 元素。