code: public boolean start(final FileDownloadListener listener, final boolean isSerial) {
          if (listener == null) {
              Util.w(TAG, "Tasks with the listener can't start, because the listener "
                      + "provided is null: [null, " + isSerial + "]");
              return false;
          }
  
          List<DownloadTaskAdapter> originalTasks =
                  FileDownloadList.getImpl().assembleTasksToStart(listener);
          if (originalTasks.isEmpty()) {
              Util.w(TAG, "no task for listener: " + listener + " to start");
              return false;
          }
  
          ArrayList<DownloadTask> downloadTasks = new ArrayList<>();
          for (DownloadTaskAdapter task : originalTasks) {
              downloadTasks.add(task.getDownloadTask());
          }
          final DownloadContext downloadContext =
                  new DownloadContext.Builder(new DownloadContext.QueueSet(), downloadTasks)
                          .setListener(new DownloadContextListener() {
                              @Override
                              public void taskEnd(@NonNull DownloadContext context,
                                                  @NonNull DownloadTask task,
                                                  @NonNull EndCause cause,
                                                  @Nullable Exception realCause,
                                                  int remainCount) {
                                  Util.d(TAG, "task " + task.getId() + "end");
                                  final DownloadTaskAdapter downloadTaskAdapter =
                                          FileDownloadUtils.findDownloadTaskAdapter(task);
                                  if (downloadTaskAdapter != null) {
                                      FileDownloadList.getImpl().remove(downloadTaskAdapter);
                                  }
                              }
  
                              @Override
                              public void queueEnd(@NonNull DownloadContext context) {
                                  Util.d(TAG, "queue end");
                              }
                          })
                          .build();
  
          final CompatListenerAdapter compatListenerAdapter = CompatListenerAdapter.create(listener);
          downloadContext.start(compatListenerAdapter, isSerial);
          return true;
      }
docs: Start the download queue by the same listener.
  
  @param listener Used to assemble tasks which is bound by the same {@code listener}
  @param isSerial Whether start tasks one by one rather than parallel.
  @return {@code true} if start tasks successfully.