离线时Android下载队列

时间:2013-11-19 12:46:19

标签: android design-patterns sms broadcastreceiver intentservice

在我的应用程序中,我在收到短信时通过IntentService创建了一个下载队列,我已经让它像魅力一样工作。

sms received -> Smsreceiver extends BroadcastReceiver -> startService(intent)
-> SimpleIntentService extends IntentService //actual download happens here
-> sendBroadcast(broadcastIntent) -> back to my app //to inform that
                                                   //a download has finished

但是当设备离线时,一个令人毛骨悚然的情况会上升,我真的不知道该怎么做,我应该抓住当前正在执行的线程,直到设备再次上线(我认为这是一个高成本的过程) ,或者我应该建立自己的队列,在重新联机时保存网址并提供IntentService?或任何其他建议?

如何在不影响设备性能/电池/等的情况下再次检查设备何时在线?

4 个答案:

答案 0 :(得分:0)

我会告诉你......

1-当您收到短信时,请在队列中添加内容

2-在您的服务中:

  • 检查您的连接

    • 如果您的在线: 获取队列列表

    对于每个操作,执行您想要执行的操作并将其从队列列表中删除

    • 如果你不是: 什么都不做

3-使用CONNECTIVITY_CHANGE广播检查连接更改以及是否已连接。在这种情况下,重现步骤2.否则不执行任何操作


检查http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges以监控连接的变化(广播部分)

答案 1 :(得分:0)

如果用户当前处于离线状态,则需要存储当前状态/数据。您可以使用databaseSharedPrefernces执行此操作。这取决于您的要求的复杂程度。

要检查网络是否在线/离线,您需要收听android.net.conn.CONNECTIVITY_CHANGE 请参阅链接 - Check INTENT internet connection

答案 2 :(得分:0)

我不确定这是否是最佳做法,但我认为您可以将您的队列构思与Google Cloud Messaging结合起来。

每当收到短信时,将其添加到队列并将其发送到您的Application Server。然后,应用程序服务器将“下载此”消息发送到您的设备。如果它在线,您的设备将获得gcm推送通知,因此它可以开始下载。下载完成后,对队列中的下一个元素执行相同的步骤。

我认为这种方法解决了互联网连接轮询的问题

答案 3 :(得分:0)

Square为此场景写了the Tape library,作为一个持久队列,他们可以在连接返回时开始读取。