Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
离线时的Android下载队列_Android_Design Patterns_Sms_Broadcastreceiver_Intentservice - Fatal编程技术网

离线时的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-为您服务:

  • 检查您的连接

    • 如果您的在线: 获取队列列表
    对于每个操作,执行您想执行的任何操作,并将其从队列列表中删除

    • 如果你不是: 无所事事
3-使用连接更改广播检查连接更改以及是否已连接。在这种情况下,复制步骤2。否则什么也不做



检查连接的监控更改(广播部分)

如果用户当前处于脱机状态,则需要存储当前状态/数据。您可以使用
数据库
共享引用
来执行此操作。这取决于您的需求的复杂性,您需要使用哪一个

要在网络在线/离线时检查WW,您需要收听
android.net.conn.CONNECTIVITY\u CHANGE

请参阅链接-

我不确定这是否是最佳做法,但我认为您可以将您的排队想法与您的想法结合起来

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


我认为这种方法解决了轮询internet连接的问题。

Square针对这种情况编写,作为一个持久队列,当连接恢复时,他们可以开始读取。

为了让您更清楚,IntentService本身就是一个队列,那么,您是否建议我构建自己的队列和管理器服务,以检查连接并向IntentService队列提供数据。也许摆脱IntentService,这就是你的意思吗?我只是告诉你我的想法。。。如果IntentService本身是一个队列,请将您的队列保留在这里,并按照我告诉您的相同方案执行。我认为有一个标志可以重用相同的服务。我想它会保留你的队列,这是我的一个选择:)因为我已经涉及到一个web服务。我会等待其他选择,并跟踪这个好上帝!酷的图书馆,这正是我需要的!但是实现这样的东西很难吗,了解这样的技术并将其编写在您自己的实现中总是很好的:)我的意思是,只有在没有办法实现和工作的情况下,我才会使用这个库