我想知道创建一个在某些 Android 活动和 Android 服务之间使用的单例是否是个坏主意。据我所知,只要整个流程还活着,就可以使用静态字段,在我的例子中是单例。
我的计划是使用单例而不是 Parcelable 在我的活动和后台服务之间共享数据。所以我的 Activity1 将通过调用 MySingleton.getInstance().addData(foo); 添加一些数据;然后我会发送一个 Intent 通知我的服务新数据已添加到单例中。接下来,我的 BackgroundService 将处理意图并调用 MySingleton.getInstance().getLatestData(); 然后它将处理数据(需要一些时间)。服务的结果接下来将通过使用单例“发布”回来并触发广播意图,这些意图由 Activity1(如果还活着)处理,并且 Activity1 将从单例中检索结果。
你们认为这是一个坏主意吗?
编辑:我想要实现的是从 Web 服务器下载数据并解析它并返回结果的软件的和平。所以我的 Activity 会创建 DownloadJob 对象。DownloadJob-Object 将被放入排队和管理所有 DownloadJobs 的 DownloadScheduler (Singleton)。DownloadScheduler 将允许同时运行 5 个 DownloadJobs 并使用队列来存储等待。有效的下载将由 DownloadService (IntentService) 完成,它通过 Intent 获得通知,现在应该立即执行(下载)新的 DownloadJob。DowanlodService 将从 DownloadSchedulers 队列 (PriorityBlockingQueue) 中检索下一个作业,并通过设置 DownloadJob.setResult(...) 返回 Result 并启动广播意图,即 Result 已准备好,
因此,在我的场景中,我将使用单例从 DownloadService 访问 DownloadJobs,而不是制作 DownloadJob Parcelable 并将其与 Intent 一起传递。所以我会避免这个问题,我在内存中有两个 DownloadJobs(一个在“活动站点”上,一个在“服务站点”上)。
有什么建议可以更好地解决这个问题吗?
像 DownloadScheduler(Singleton) 这样的静态实例是否会被 android 系统在低内存上释放?那么将应用程序子类化并保留引用(非静态)会避免这个问题吗?