1

我有一个棘手的用例,我正在尝试为其寻找最佳设计。描述是:

  • 应该有一个FolderListActivity对应的视图,它显示了可供下载的文件夹列表
    • 用户可以长按项目,并将其添加到下载队列
  • 另一个名为的活动DownloadingQueueActivity应该可用,其中:
    • 显示队列中的项目列表,带有进度条(下载的文件/总文件)
    • 它是可重新排列的(用户应该能够更改队列中项目的顺序)
    • 可以删除项目(甚至整个队列)
    • 下载可以暂停

此外,这应该由服务处理,因为从应用程序退出后应该继续下载。因此,服务应该能够:

  • 从队列中下载文件夹中的文件
  • 通知DownloadingQueueActivity进度
  • 监听队列的变化(由 引起DownloadingQueueActivity

我尝试通过Messenger.

非常感谢任何有关实施此操作的建议甚至提示。

4

1 回答 1

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);
于 2013-02-19T01:35:58.897 回答