有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对活动生命周期的长期引用

假设我有一个singleton类(Downloader)负责下载和持久化文件。当客户端请求下载时,他还必须提供回调。我的问题是关于这些回调对象的存储

如果我有一个实现回调接口的活动,然后请求多个大型下载,Downloader类将无限期地保存对该活动的引用。如果在下载完成之前,请求它们的活动经历了生命周期并被销毁了呢

在这种情况下,下载程序将阻止回收者回收活动中的垃圾。我不介意请求的下载继续进行。然而,我想做的是,以某种方式检测提供的回调应该被收集,并且我实际上正在泄漏它

有这样的设计模式吗?我在想Reference子类中的一个会很有用

谢谢


共 (1) 个答案

  1. # 1 楼答案

    换一种方式做,你可以让它们保持断开连接,并避免将活动引用保留在周围这种高度不受欢迎的做法

    我创建了一个非常简单的ServiceLocator类,该类保留对所有单例的静态引用,并按类型解析它们,但您可以做得更简单。您只需要一个类来保存对下载程序的静态引用,并将该引用公开给您的活动。如果您需要调用任何活动,请使用Android框架所使用的发布/订阅模型(即setOnClickListener(OnClickListener listener)

    Downloader可以有一个名为DownloadUpdateListener的内部接口、该接口的一个实例,以及一个用于设置该接口并从活动中删除引用的register和unregister方法。该活动将在本地创建其DownloadUpdateListener的实例,以便能够访问该活动的所有字段和视图。在Downloader中,在调用其方法之前,请检查侦听器是否为null。在onResume中注册您的侦听器,不要忘记在onPause中注销它