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

时间:2012-11-12 12:20:51

标签: android android-intent android-service intentservice

我有一个应用程序,其初始活动列出了列表视图中的一些文件。在列表中单击某个项目时,将转到该特定文件的详细活动。

在详细视图中,我有一个名为download的按钮,当你点击下载时,它会启动一个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并检索结果,以便它可以显示进度条在正在下载的文件的列表项中。

  1. 这可以使用IntentService吗?
  2. IntentService是正确的吗?
  3. 有没有例子(因为我没有找到任何显示我如何做的事情)?

2 个答案:

答案 0 :(得分:9)

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

要显示Activity的进展,我不相信广播是正确的。尽管它们很可能是按顺序处理的,但框架或Android本身并不能保证交付时的订单。这意味着您可以获得50%的广播,然后播放40%的广播。为此,我建议您查看此示例:http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

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

答案 1 :(得分:0)

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

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

http://mobile.tutsplus.com/tutorials/android/android-fundamentals-intentservice-basics/