Android:在Activity和Service之间使用的Singleton

soc*_*qwe 8 singleton android

我想知道创建一个在一些Android活动和Android服务之间使用的Singleton是不是一个坏主意.据我所知,静态字段,在我的情况下,Singleton,只要整个Process处于活动状态就可用.

我的计划是使用单例而不是Parcelable在我的活动和后台服务之间共享数据.所以我的Activity1将通过调用MySingleton.getInstance()添加一些数据.addData(foo); 然后我会发送一个Intent来告知我的服务新单元已被添加到单例中.接下来,我的BackgroundService将处理intent并调用MySingleton.getInstance().getLatestData(); 然后它会处理数据(需要一些时间).接下来,通过使用单例并激发广播意图,该服务的结果将"后"回来,这些广告意图由Activity1处理(如果是活动的),并且Activity1将从单例中检索结果.

你们认为这是个坏主意吗?

编辑:我想要实现的是一个软件的和平,从Web服务器下载数据解析它并返回结果.所以我的Activity将创建DownloadJob对象.DownloadJob-Object将被放入DownloadScheduler(Singleton),它将所有DownloadJobs排队和管理.DownloadScheduler允许同时运行5个DownloadJobs并使用队列来存储等待.有效的下载将由DownloadService(IntentService)完成,它通过Intent通知现在应该执行(下载)新的DownloadJob.DowanlodService将从DownloadSchedulers队列(PriorityBlockingQueue)中检索下一个作业,并通过设置DownloadJob.setResult(...)返回结果并触发广播意图,结果已准备好,

因此,在我的场景中,我将使用单例从DownloadService访问DownloadJobs,而不是生成DownloadJob Parcelable并将其传递给Intent.所以我会避免这个问题,我在内存中有两个DownloadJobs(一个在"活动站点",一个在"服务站点").

任何建议如何更好地解决这个问题?

静态实例(例如DownloadScheduler(Singleton))是否会被低内存的android系统释放?那么将子类化应用程序并保持引用(非静态)避免这个问题?

Abd*_*aly 0

使用像这样的单例不一定是一个坏主意,但如果 Android 决定停止您的进程,您将丢失它的状态。您可能需要考虑将状态存储在 SQLite 数据库或持久队列中(看看磁带就是一个​​很好的例子)。