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