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