/** * 开始下载任务 * * @param downloadId * @param callback */ public void startTask(int downloadId, FileDownloaderCallback callback) { FileDownloaderModel model = getFileDownloaderModelById(downloadId); if (model != null) { BridgeListener bridgeListener = mListenerManager.getBridgeListener(downloadId); bridgeListener.addDownloadListener(callback); if (mDownloadingList.size() >= mConfiguration.getMaxDownloadingCount()) { // 下载中队列已满 if (!mWaitQueue.contains(model)) { mWaitQueue.offer(model); } bridgeListener.wait(downloadId); } else { mDownloadingList.add(model); final BaseDownloadTask task = FileDownloader.getImpl() .create(model.getUrl()) .setPath(model.getPath()) .setCallbackProgressTimes(100) .setAutoRetryTimes(mAutoRetryTimes) .setListener(bridgeListener); for (int i = 0; i < mHeaders.size(); i++) { task.addHeader(mHeaders.name(i), mHeaders.value(i)); } bridgeListener.setDownloadTask(task); task.start(); } } else { ILogger.e("Task does not exist!"); } }
/** * 删除一个任务 * * @param downloadId */ public void deleteTask(int downloadId) { if (mDbController.deleteTask(downloadId)) { FileDownloaderModel model = getFileDownloaderModelById(downloadId); if (model != null) { // 删除文件 new File(model.getPath()).delete(); } pauseTask(downloadId); removeDownloadingTask(downloadId); removeWaitQueueTask(downloadId); try { mAllTasks.remove(downloadId); } catch (Exception e) { ILogger.e(e); } } else { ILogger.e("delete failure"); } }
/** * 将一个等待中的任务从下等待队列中移除 * * @param downloadId */ protected synchronized void removeWaitQueueTask(int downloadId) { Iterator<FileDownloaderModel> iterator = mWaitQueue.iterator(); while (iterator.hasNext()) { FileDownloaderModel model = iterator.next(); if (model != null && model.getId() == downloadId) { try { iterator.remove(); } catch (Exception e) { ILogger.e(e); } return; } } }