我正在加载要下载的文件数组,我正在为每个文件启动一个IntentService。问题是在Internet连接问题的情况下,例如如果设备断开连接,我将不得不以某种方式清除或停止IntentService的队列处理。
在我的代码中,我有一个正在下载文件的while循环。此循环运行的条件之一是:使用以下代码检查Internet连接:
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm != null){
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
return false;
}
我的循环类似于以下内容:
while(.. , isOnline()){
/// Download file
}
如果我现在正在队列中下载文件,如果互联网发生故障,循环将不再运行,该文件的IntentService将停止,但现在如果互联网回来,下载将从下一个文件开始队列忽略我们无法下载的最后一个文件。如何清除IntentService队列或使IntentService队列从其离开的位置继续下载。
答案 0 :(得分:1)
如何清除IntentService队列或使IntentService队列从其离开的位置恢复下载。
AFAIK你也不能这样做。 IntentService
使用的队列不会向开发人员公开。
在这种情况下,您可以更好地创建自己的队列(例如,LinkedBlockingQueue
),您自己的线程监视该队列,以及您自己的Service
包装所有这些(并处理如果队列清空,则调用stopSelf()
并退出后台线程。
或者让IntentService
通知某些内容(例如,通过Messenger
)关于下载失败的内容,以便您可以在以后访问互联网时稍后将该文件入队。