我正在构建的应用程序使用本地Service
将文件从网络下载到手机的SD卡。在这个应用程序中,用户可以浏览书籍列表,并在线阅读。用户还可以下载pdf
副本以供离线查看。从本地服务沟通进度
要处理下载,我使用的是本地绑定Service
。我不希望这个Service
一直运行,只有在下载文件时。因此Service
可以在其任务完成时自行关闭,我不绑定服务,而是通过传递给Context.startService
的Intent
发送“enqueue for download”命令。
可供下载的书籍显示在列表中。用户可以通过点击列表中的行来选择下载图书。在下载时,我需要在实际的书籍列表行上使用ProgressBar
来显示下载进度。我还需要在行上显示一本书是否可以下载,或者下载是否已完成或失败。例如,书籍可以在整个应用程序中以不同的活动显示 - 例如在搜索中或在用户喜爱的书籍列表中。当书籍显示在不同的地方时,这些不是同一个对象,但它们的唯一标识是bookId
。
因为我不想从每一个Activity
绑定到服务,我的设想是使用一个public static final HashMap
上Service
类本身包含的bookId
映射下载状况,排队,下载,取消了enum
,等等。每个书籍视图在显示时都会检查该静态HashMap,并且如果bookId在地图中,则检索并显示其状态。我并不特别喜欢这个想法,但目前这是我能想到从服务中检索状态的唯一方式,而不必绑定到它并启动它。
此外,如果是活动下载,我需要从Service
获取下载进度百分比,对于给定的bookId
。再次,我宁愿不从任何活动绑定到服务,所以我不知道如何去从Service
检索当前的进度。我目前的计划是使用某种单身中介,Service
将推送更新,并且可以读取视图。但我对这个想法并不满意。
我想避免绑定到每个Activity的Service
的原因是1.)我已经在运行另一个Service
和2.)绑定是冗长的,我想避免需要传递引用到Service
(但毫无疑问,这不是太多问题)。
也许绑定到本地Service
是不是足够昂贵,以保证这种其他设置?我不应该关心每个Activity
的绑定吗?也许这是一个非问题?
我正在考虑结合这两种服务,但其中一种是前台服务,这种服务不需要。至于传递一个连接,我的意思是在Activity内部,它的视图和点击监听器。 – skyler 2010-05-17 23:49:37
“我正在考虑将这两种服务结合起来,但其中一种服务是前台服务,并不需要这样做。”啊,好逻辑,那里。 “至于传递一个连接,我的意思是在活动中,对其观点和点击听众。”好。我通常有听众,这些都是活动的私人内部类,所以没有必要“传递”。 – CommonsWare 2010-05-18 20:51:10