我有一个应用程序,其初始活动列出了列表视图中的一些文件。在列表中单击某个项目时,将转到该特定文件的详细活动。
在详细视图中,我有一个名为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并检索结果,以便它可以显示进度条在正在下载的文件的列表项中。
答案 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/