离线时的Android下载队列
在我的应用程序中,我通过在收到短信时创建一个下载队列,我已经让它像一个符咒一样工作离线时的Android下载队列,android,design-patterns,sms,broadcastreceiver,intentservice,Android,Design Patterns,Sms,Broadcastreceiver,Intentservice,在我的应用程序中,我通过在收到短信时创建一个下载队列,我已经让它像一个符咒一样工作 sms received -> Smsreceiver extends BroadcastReceiver -> startService(intent) -> SimpleIntentService extends IntentService //actual download happens here -> sendBroadcast(broadcastIntent) -> ba
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
但当设备离线时,一个令人毛骨悚然的情况会出现,我真的不知道该怎么办,我应该保留当前正在执行的线程,直到设备再次在线(我认为这是一个高成本的过程),还是我应该建立自己的队列,在设备重新在线时保存URL和提供IntentService?还是其他建议
另外,如何在不影响设备性能/电池等的情况下检查设备何时再次联机?我会告诉您
1-当您收到短信时,向您的队列中添加一些内容
2-为您服务:
- 检查您的连接
- 如果您的在线: 获取队列列表
- 如果你不是: 无所事事
检查连接的监控更改(广播部分)如果用户当前处于脱机状态,则需要存储当前状态/数据。您可以使用
数据库
或共享引用
来执行此操作。这取决于您的需求的复杂性,您需要使用哪一个
要在网络在线/离线时检查WW,您需要收听android.net.conn.CONNECTIVITY\u CHANGE
请参阅链接-我不确定这是否是最佳做法,但我认为您可以将您的排队想法与您的想法结合起来 每当收到sms时,将其添加到队列并发送到应用程序服务器。然后,应用服务器向您的设备发送“下载此”消息。您的设备在线时将收到gcm推送通知,因此可以开始下载。下载完成后,对队列中的下一个元素执行相同的步骤
我认为这种方法解决了轮询internet连接的问题。Square针对这种情况编写,作为一个持久队列,当连接恢复时,他们可以开始读取。为了让您更清楚,IntentService本身就是一个队列,那么,您是否建议我构建自己的队列和管理器服务,以检查连接并向IntentService队列提供数据。也许摆脱IntentService,这就是你的意思吗?我只是告诉你我的想法。。。如果IntentService本身是一个队列,请将您的队列保留在这里,并按照我告诉您的相同方案执行。我认为有一个标志可以重用相同的服务。我想它会保留你的队列,这是我的一个选择:)因为我已经涉及到一个web服务。我会等待其他选择,并跟踪这个好上帝!酷的图书馆,这正是我需要的!但是实现这样的东西很难吗,了解这样的技术并将其编写在您自己的实现中总是很好的:)我的意思是,只有在没有办法实现和工作的情况下,我才会使用这个库