gpt4 book ai didi

android - 从服务下载文件(更新 UI)

转载 作者:行者123 更新时间:2023-11-30 03:46:21 26 4
gpt4 key购买 nike

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

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

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

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

我尝试通过 Messenger 做到这一点,但我最终得到了很多不同类型的消息,我认为这不是一个优雅的解决方案。

非常感谢任何有关实现此功能的建议甚至暗示。

最佳答案

看来您的方向是正确的。您将拥有正在处理所有下载的 DownloadService。您的 DownloadingQueueActivity 可以绑定(bind)到这个 Service .当它绑定(bind)时,您就可以获得所有必要的信息来更新 Activity 。

至于推送通知,您可以使用监听器。所以为Activiy创建一个新的接口(interface)来实现:

public static interface DownloadListener {

void updateViews(int progress);
}

然后将此函数添加到您的 Activity。

public class DownloadingQueueActivity {

public void updateViews(int progress) {

runOnUiThread(new Runnable() {
@Override
public void run() {
//update views
}
});
}
}

然后在服务绑定(bind)后添加监听器:

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 中,当需要更新 View 时,只需向服务中设置的监听器发送一条消息(也不要忘记在服务中创建 addListener 函数以及在 Activity 的 onStop():

listener.updateViews(30);

关于android - 从服务下载文件(更新 UI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14946684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com