1

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

1) 位置是通过服务找到的。目前,服务直接引用我的单例来将经度和纬度填充到其中。我想使用 BroadcastReceiver 来发送单例听到并用于更新值的广播。

但是,要注册 BroadcastReceiver,我需要在我的单例中添加一个 Context。实现我想要的最巧妙的方法是什么。BroadcastReceiver 可能不是合适的对象吗?

2)另外,我在使用单例时会遇到什么问题?我假设 Android 可能会在任何给定时间回收这些内存(这显然很糟糕);那么我该如何防止呢?传递应用程序的 Context 并将其存储在成员变量中会阻碍这一点吗?

Android 文档指出:“但是,静态对象的生命周期并不受您的控制;因此要遵守生命周期模型,应用程序类应该在 onCreate() 和 onTerminate( ) 应用程序类的方法”,但我不完全确定如何实现这一点。

4

1 回答 1

6

但是,要注册 BroadcastReceiver,我需要在我的单例中添加一个 Context。实现我想要的最巧妙的方法是什么。BroadcastReceiver 可能不是合适的 > 对象吗?

“最巧妙的方法”是不做你正在做的事情。请仅从,或. BroadcastReceiver_ _ 当, , 或被销毁时,您必须取消注册。ActivityServiceApplicationBroadcastReceiverActivityServiceApplication

我假设 Android 可能会在任何给定时间回收这些内存(这显然很糟糕);那么我该如何防止呢?

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

只把不介意丢失的东西放在记忆中。

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

传递应用程序的 Context 并将其存储在成员变量中会阻碍这一点吗?

不。

Android 文档指出:“但是,静态对象的生命周期并不受您的控制;因此要遵守生命周期模型,应用程序类应该在 onCreate() 和 onTerminate( ) 应用程序类的方法”,但我不完全确定如何实现这一点。

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

于 2010-09-17T16:27:05.403 回答