【发布时间】:2015-06-03 03:14:24
【问题描述】:
基本上在 Android 上,我正在尝试从 Web 服务上传/下载数据,并有一个进度条,应该显示进度百分比。
以下是我实施的方法以及考虑它们的原因:
-
选择
IntentService在后台运行: 根据link,我无法使用绑定服务,因为绑定的 Activity/Fragment 被销毁时它会销毁。因此选择IntentService而不是Service。将其移过一次,意图服务在工作线程上工作,因此会好得多。 -
广播接收更新:
实现
LocalBroadcastManager以更新进度条 UI,方法是注册它以收听从上述IntentService接收的广播。
但是,使用这种方法,需要解决以下问题:
不维护广播的顺序。广播携带上传/下载的进度百分比。但是由于没有维护顺序,我有可能收到过时的更新(例如:我可能会在 40% 之后收到 30%)。我也尝试使用LocalBroadcastManager 的sendBroadcastSync 方法,但它不能始终如一地工作(我对此不太确定)。因此,我尝试通过Handler 实现Messenger,但是我知道一旦重新创建UI(活动/片段被破坏和创建),该方法将无法重新连接到正在进行的上传/下载。基本上,对 Handler 的引用与之前的活动/片段一起丢失,因此消息不会传递到 UI 进行更新。
一段时间以来,我一直在努力解决问题,但我无法完成。你的智慧之言会很有帮助。
【问题讨论】:
标签: android file-upload broadcastreceiver intentservice localbroadcastmanager