【发布时间】:2013-03-12 18:26:14
【问题描述】:
我有一个关于我应该使用哪种类型的服务来在我的应用程序中运行数据上传和下载的问题。
具体来说,似乎绑定服务(通过调用 bindService() 获得)确实更适用,因为我的后台工作不会无限期地运行,我的理解是这确实是使用 startService/START_STICKY 的目的。
也就是说,我正在运行长时间的上传和下载,并且我确实不希望在上传/下载过程中收集我的服务垃圾,无论应用程序的 UI 发生了什么(发送到背景等)。据我了解,如果我有一个绑定服务,一旦所有连接都解除绑定,它就会被垃圾收集。这是否意味着我的绑定服务可能会在它正在执行的操作中途停止?
任何人都可以在这里指出正确的方向吗?在此先感谢
【问题讨论】:
-
我建议查看
IntentService或将Servicerun in the foreground 设为Notification。 -
由于潜在的并发问题,我实际上无法使用 IntentService。我希望将这项服务用于一些不同的事情,而不仅仅是上传和下载,而且我需要其中一些操作来避免互相阻塞。据我了解,发送到 IntentServices 的操作将始终串行运行?如果不是,那么这似乎是正确的解决方案。
-
我为我的应用程序的后台进程提供了混合服务。它充当
IntentService来安排某些数据同步操作,但可以绑定以检索进度更新。我允许服务在后台继续下载,但我故意没有让它持久化。据我了解,要防止服务被踢出,您需要启动前台通知。 -
我正在编辑我的评论以提供另一种选择。使服务在前台运行将向系统发出信号,表明垃圾收集您的服务可能会对用户造成干扰。这可能是比 IntentService 更好的选择。
-
我注意到您说后台工作不会无限期地进行。你介意我问一下上传/下载和加载的频率是多少吗?如果它们是不常见的短任务,AsyncTask 可能更适合您的需求。
标签: android multithreading service upload download