我有一个棘手的用例,我正试图找到最好的设计。描述是:
FolderListActivity
对应的视图,其中显示了可供下载的文件夹列表
DownloadingQueueActivity
的活动,其中:
此外,这应由服务处理,因为从应用程序退出后应继续下载。因此,服务应该能够:
DownloadingQueueActivity
进度DownloadingQueueActivity
)我尝试通过Messenger
执行此操作,但我最终得到了许多不同类型的消息,我认为这些消息并不是优雅的解决方案。
非常感谢任何有关实施此建议甚至暗示的建议。
答案 0 :(得分:1)
好像你走在了正确的轨道上。您将拥有处理所有下载的DownloadService。您的DownloadingQueueActivity
可以绑定到此Service。当它绑定时,您可以获得更新活动所需的所有信息。
对于推送通知,您可以使用监听器。因此,为Activiy创建一个新的接口来实现:
public static interface DownloadListener {
void updateViews(int progress);
}
然后将此功能添加到您的活动中。
public class DownloadingQueueActivity {
public void updateViews(int progress) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//update views
}
});
}
}
然后在绑定后将侦听器添加到服务:
private ServiceConnection listenerStarter = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
DownloadService ds = ((DownloadService.LocalBinder) service).getService();
ds.addListener(DownloadingQueueActivity.this);
}
public void onServiceDisconnected(ComponentName className) {
}
};
然后在您的DownloadService中,当需要更新视图时,只需向服务中设置的侦听器发送消息(也不要忘记在服务中创建addListener函数以及删除中的侦听器) onStop()的活动):
listener.updateViews(30);