Internet停机时停止/清除IntentService队列?

时间:2011-11-03 18:35:01

标签: android

我正在加载要下载的文件数组,我正在为每个文件启动一个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队列从其离开的位置继续下载。

1 个答案:

答案 0 :(得分:1)

  

如何清除IntentService队列或使IntentService队列从其离开的位置恢复下载。

AFAIK你也不能这样做。 IntentService使用的队列不会向开发人员公开。

在这种情况下,您可以更好地创建自己的队列(例如,LinkedBlockingQueue),您自己的线程监视该队列,以及您自己的Service包装所有这些(并处理如果队列清空,则调用stopSelf()并退出后台线程。

或者让IntentService通知某些内容(例如,通过Messenger)关于下载失败的内容,以便您可以在以后访问互联网时稍后将该文件入队。