【发布时间】:2012-11-19 22:29:04
【问题描述】:
我有一个相当棘手的情况,我正在尝试确定最佳设计。基本情况是这样的:
- 我正在设计一个与电子邮件界面类似的消息传递系统。
- 当用户单击带有附件的邮件时,会生成一个 Activity,该 Activity 会显示该邮件的文本以及一个表明还有附加附件的回形针。
- 此时,我开始预加载附件,以便在用户单击它时加载更快。
- 目前,当用户单击附件时,它会提示加载对话框,直到下载完成,此时它会加载单独的附件查看器活动,并传入 bmp 字节数组。
- 我不想将附件保存到永久存储中。
我遇到的困难是支持旋转以及按下主页按钮等。下载当前是通过线程和处理程序设置完成的。
我希望流程如下:
- 用户像以前一样加载消息,像以前一样开始预加载附件(用户不可见)。
- 当用户点击附件链接时,附件查看器活动会立即生成。
- 如果下载完成,将显示图像。如果没有,则在此活动中显示一个对话框,直到它完成并可以显示。请注意,理想情况下,下载永远不会重新启动,否则我在预加载上浪费了周期。
显然,我需要一些能够持续下载并能够回调任意绑定活动的持久后台进程。看起来 IntentService 几乎符合我的需求,因为它在后台线程中工作并且具有服务(非 UI)生命周期。但是,它能满足我的其他需求吗?
我注意到,我想要做的事情的常见实现从调用者 Activity 获取 Messenger,以便可以将 Message 对象发送回调用者线程中的 Handler。这一切都很好,但是在我的情况下,当调用者 Activity 被停止或销毁并且当前活动的 Activity(附件查看器)正在显示时会发生什么? 有没有办法将新的 Activity 动态绑定到正在运行的 IntentService,以便我可以将消息发送回新的 Activity?
另一个问题是关于 Message 对象的。我可以在这个包中发回任意大的数据吗?例如,我不需要发回“文件已下载”,而是需要发回下载文件本身的字节数组,因为我不想将它写入磁盘(是的,必须如此)。
非常感谢任何有关实现我想要的行为的建议。我使用 Android 的时间不长,而且我经常对如何在 Activity 生命周期中最好地处理异步进程感到困惑,尤其是在方向更改和主页按钮按下时...
【问题讨论】: