Android 订阅或绑定到现有的Intent服务

Android 订阅或绑定到现有的Intent服务,android,android-intent,android-service,intentservice,Android,Android Intent,Android Service,Intentservice,我有一个应用程序,它有一个初始活动,在列表视图中列出一些文件。当在列表中单击某个项目时,它会将您带到该特定文件的详细信息活动 在“详细信息”视图中,我有一个名为“下载”的按钮,当您单击“下载”时,它会启动一个IntentService,该服务将要下载的文件设置为: downloadButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = n

我有一个应用程序,它有一个初始活动,在列表视图中列出一些文件。当在列表中单击某个项目时,它会将您带到该特定文件的详细信息活动

在“详细信息”视图中,我有一个名为“下载”的按钮,当您单击“下载”时,它会启动一个IntentService,该服务将要下载的文件设置为:

downloadButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(AppDetailsActivity.this, AppDownloadService.class);
        intent.putExtra(Consts.APP_DOWNLOAD_RECEIVER_KEY, new DownloadReceiver(new Handler()));
        startService(intent);
    }
});
DownloadReceiver类用于更新下载文件的详细活动中的进度条

现在我想做的是

如果用户当前正在从“详细信息”活动下载文件,然后返回到上一个活动,我希望该活动以某种方式订阅/绑定到相同的IntentService并检索结果,以便它可以在正在下载的文件的列表项中显示进度条

  • 这是否可以使用IntentService实现
  • IntentService是正确的吗
  • 有没有任何例子(因为我没有发现任何东西可以告诉我如何做到这一点)

  • 我设法找到了解决办法。事实证明,我必须使用广播意图来公布我服务的进展;并在我的活动中使用BroadcastReceiver来检索结果

    下面的链接显示了通过广播从服务发送和检索结果的示例


    下载时,您肯定可以使用
    IntentService
    。它运行在不同的线程上。另外,请记住,为该
    IntentService
    多次调用
    startService()
    ,它将创建一个队列,并一次处理一个intent

    要显示
    活动的进度
    ,我不认为广播是正确的。尽管它们很可能是按顺序处理的,但框架或Android本身不会保证交付时会有订单。这意味着你可以得到50%的广播,然后是40%的广播。为此,我建议您看看这个示例:


    它可能看起来有点复杂,但您可以依靠双向沟通。

    谢谢。我需要再次访问此功能,因此这可能是一个改进的机会。因此,对于IntentService,我如何确保我的进度条在活动中得到更新?请记住,如果“活动”已关闭并重新启动(文件仍在下载),则“活动”必须检索已下载文件的进度,以显示在进度条上。该示例仅显示活动开始和结束的处理,除非我遗漏了什么?谢谢。该示例显示了活动和服务之间的通信。活动可以发送一条消息,请求进度,服务在responseYep中发送进度,谢谢,我已经让它与消息和传入处理程序一起工作,现在工作得更好了。谢谢我也有类似的情况。我能知道当活动结束并重新启动时,您是如何与服务沟通的吗?谢谢您的回答!我看到了许多绑定活动和服务的示例,但是,如果我将活动与IntentService绑定,它会起作用吗?