5

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

在详细视图中,我有一个名为下载的按钮,当您单击下载时,它会启动一个 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. 有没有例子(因为我没有找到任何可以告诉我如何做到这一点的东西)?
4

2 回答 2

9

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

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

它可能看起来有点复杂,但您将拥有可以依赖的 2 路通信。

于 2013-04-30T14:51:06.550 回答
0

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

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

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

于 2012-11-14T09:05:55.940 回答