diff --git a/Aria/src/main/java/com/arialyy/aria/core/AMTarget.java b/Aria/src/main/java/com/arialyy/aria/core/AMTarget.java index cf7e5742..d5b1a5ad 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/AMTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/AMTarget.java @@ -17,25 +17,56 @@ package com.arialyy.aria.core; import android.support.annotation.NonNull; import android.text.TextUtils; -import com.arialyy.aria.core.command.CmdFactory; -import com.arialyy.aria.core.command.IDownloadCmd; +import com.arialyy.aria.core.command.download.CmdFactory; +import com.arialyy.aria.core.command.download.IDownloadCmd; import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CommonUtil; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.WeakHashMap; /** * Created by lyy on 2016/12/5. * https://github.com/AriaLyy/Aria */ public class AMTarget { - //private AMReceiver mReceiver; DownloadEntity entity; String targetName; + DownloadTaskEntity taskEntity; - AMTarget(DownloadEntity entity, String targetName) { + public AMTarget(DownloadEntity entity, String targetName) { this.entity = entity; this.targetName = targetName; + taskEntity = new DownloadTaskEntity(entity); + } + + /** + * 给url请求添加头部 + * + * @param key 头部key + * @param header 头部value + */ + public AMTarget addHeader(@NonNull String key, @NonNull String header) { + taskEntity.headers.put(key, header); + return this; + } + + /** + * 给url请求添加头部 + * + * @param headers Map + */ + public AMTarget addHeaders(Map headers) { + if (headers != null && headers.size() > 0) { + Set keys = headers.keySet(); + for (String key : keys) { + taskEntity.headers.put(key, headers.get(key)); + } + } + return this; } /** @@ -92,7 +123,7 @@ public class AMTarget { */ public void add() { DownloadManager.getInstance() - .setCmd(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_CREATE)) + .setCmd(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_CREATE)) .exe(); } @@ -101,8 +132,8 @@ public class AMTarget { */ public void start() { List cmds = new ArrayList<>(); - cmds.add(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_CREATE)); - cmds.add(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_START)); + cmds.add(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_CREATE)); + cmds.add(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_START)); DownloadManager.getInstance().setCmds(cmds).exe(); cmds.clear(); } @@ -112,7 +143,7 @@ public class AMTarget { */ public void stop() { DownloadManager.getInstance() - .setCmd(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_STOP)) + .setCmd(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_STOP)) .exe(); } @@ -121,7 +152,7 @@ public class AMTarget { */ public void resume() { DownloadManager.getInstance() - .setCmd(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_START)) + .setCmd(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_START)) .exe(); } @@ -130,7 +161,7 @@ public class AMTarget { */ public void cancel() { DownloadManager.getInstance() - .setCmd(CommonUtil.createCmd(targetName, entity, CmdFactory.TASK_CANCEL)) + .setCmd(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_CANCEL)) .exe(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/AMUplodReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/AMUplodReceiver.java deleted file mode 100644 index 981c5e6d..00000000 --- a/Aria/src/main/java/com/arialyy/aria/core/AMUplodReceiver.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.arialyy.aria.core; - -/** - * Created by Aria.Lao on 2017/1/18. - * AM 上传文件接收器 - */ -public class AMUplodReceiver { -} diff --git a/Aria/src/main/java/com/arialyy/aria/core/Aria.java b/Aria/src/main/java/com/arialyy/aria/core/Aria.java index 4aab85f2..9183b797 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/Aria.java +++ b/Aria/src/main/java/com/arialyy/aria/core/Aria.java @@ -26,6 +26,7 @@ import android.app.Service; import android.content.Context; import android.os.Build; import android.widget.PopupWindow; +import com.arialyy.aria.core.receiver.DownloadReceiver; import com.arialyy.aria.core.scheduler.OnSchedulerListener; import com.arialyy.aria.core.task.Task; @@ -36,7 +37,7 @@ import com.arialyy.aria.core.task.Task; *
  *   
  *   //启动下载
- *   Aria.whit(this)
+ *   Aria.download(this)
  *       .load(DOWNLOAD_URL)     //下载地址,必填
  *       //文件保存路径,必填
  *       .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk")
@@ -99,120 +100,48 @@ import com.arialyy.aria.core.task.Task;
   }
 
   /**
-   * 接受Activity、Service、Application
+   * 初始化下载
+   *
+   * @param obj 支持类型有【Activity、Service、Application、DialogFragment、Fragment、PopupWindow、Dialog】
    */
-  public static AMReceiver whit(Context context) {
-    //if (context == null) throw new IllegalArgumentException("context 不能为 null");
-    checkNull(context);
-    if (context instanceof Activity
-        || context instanceof Service
-        || context instanceof Application) {
-      return AriaManager.getInstance(context).get(context);
-    } else {
-      throw new IllegalArgumentException("这是不支持的context");
-    }
-  }
-
-  /**
-   * 处理Fragment
-   */
-  public static AMReceiver whit(Fragment fragment) {
-    checkNull(fragment);
-    return AriaManager.getInstance(
-        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
-            : fragment.getActivity()).get(fragment);
-  }
-
-  /**
-   * 处理Fragment
-   */
-  public static AMReceiver whit(android.support.v4.app.Fragment fragment) {
-    checkNull(fragment);
-    return AriaManager.getInstance(
-        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
-            : fragment.getActivity()).get(fragment);
-  }
-
-  /**
-   * 处理Fragment、或者DialogFragment
-   */
-  public static AMReceiver whit(DialogFragment dialog) {
-    checkNull(dialog);
-    return AriaManager.getInstance(
-        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? dialog.getContext() : dialog.getActivity())
-        .get(dialog);
-  }
-
-  /**
-   * 处理popupwindow
-   */
-  public static AMReceiver whit(PopupWindow popupWindow) {
-    checkNull(popupWindow);
-    return AriaManager.getInstance(popupWindow.getContentView().getContext()).get(popupWindow);
-  }
-
-  /**
-   * 处理Dialog
-   */
-  public static AMReceiver whit(Dialog dialog) {
-    checkNull(dialog);
-    return AriaManager.getInstance(dialog.getContext()).get(dialog);
+  public static DownloadReceiver download(Object obj) {
+    return get(obj).download(obj);
   }
 
   /**
    * 处理通用事件
+   *
+   * @param obj 支持类型有【Activity、Service、Application、DialogFragment、Fragment、PopupWindow、Dialog】
    */
-  public static AriaManager get(Context context) {
-    if (context == null) throw new IllegalArgumentException("context 不能为 null");
-    if (context instanceof Activity
-        || context instanceof Service
-        || context instanceof Application) {
-      return AriaManager.getInstance(context);
+  public static AriaManager get(Object obj) {
+    if (obj instanceof Activity || obj instanceof Service || obj instanceof Application) {
+      return AriaManager.getInstance((Context) obj);
+    } else if (obj instanceof DialogFragment) {
+      DialogFragment dialog = (DialogFragment) obj;
+      return AriaManager.getInstance(
+          Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? dialog.getContext()
+              : dialog.getActivity());
+    } else if (obj instanceof android.support.v4.app.Fragment) {
+      android.support.v4.app.Fragment fragment = (android.support.v4.app.Fragment) obj;
+      return AriaManager.getInstance(
+          Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
+              : fragment.getActivity());
+    } else if (obj instanceof Fragment) {
+      Fragment fragment = (Fragment) obj;
+      return AriaManager.getInstance(
+          Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
+              : fragment.getActivity());
+    } else if (obj instanceof PopupWindow) {
+      PopupWindow popupWindow = (PopupWindow) obj;
+      return AriaManager.getInstance(popupWindow.getContentView().getContext());
+    } else if (obj instanceof Dialog) {
+      Dialog dialog = (Dialog) obj;
+      return AriaManager.getInstance(dialog.getContext());
     } else {
-      throw new IllegalArgumentException("这是不支持的context");
+      throw new IllegalArgumentException("不支持的类型");
     }
   }
 
-  /**
-   * 处理Dialog的通用任务
-   */
-  public static AriaManager get(Dialog dialog) {
-    checkNull(dialog);
-    return AriaManager.getInstance(dialog.getContext());
-  }
-
-  /**
-   * 处理Dialog的通用任务
-   */
-  public static AriaManager get(PopupWindow popupWindow) {
-    checkNull(popupWindow);
-    return AriaManager.getInstance(popupWindow.getContentView().getContext());
-  }
-
-  /**
-   * 处理Fragment的通用任务
-   */
-  public static AriaManager get(Fragment fragment) {
-    checkNull(fragment);
-    return AriaManager.getInstance(
-        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
-            : fragment.getActivity());
-  }
-
-  /**
-   * 处理Fragment的通用任务
-   */
-  public static AriaManager get(android.support.v4.app.Fragment fragment) {
-    checkNull(fragment);
-    return AriaManager.getInstance(
-        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? fragment.getContext()
-            : fragment.getActivity());
-  }
-
-  private static void checkNull(Object obj) {
-    if (obj == null) throw new IllegalArgumentException("不能传入空对象");
-  }
-
   public static class SimpleSchedulerListener implements OnSchedulerListener {
 
     @Override public void onTaskPre(Task task) {
diff --git a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java
index b9dcb150..eeff3689 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java
@@ -19,7 +19,6 @@ import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.Application;
 import android.app.Dialog;
-import android.app.Service;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Build;
@@ -29,11 +28,12 @@ import android.support.v4.app.Fragment;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.PopupWindow;
-import com.arialyy.aria.core.command.CmdFactory;
+import com.arialyy.aria.core.command.download.CmdFactory;
+import com.arialyy.aria.core.receiver.DownloadReceiver;
 import com.arialyy.aria.util.CAConfiguration;
 import com.arialyy.aria.util.CheckUtil;
 import com.arialyy.aria.util.CommonUtil;
-import com.arialyy.aria.core.command.IDownloadCmd;
+import com.arialyy.aria.core.command.download.IDownloadCmd;
 import com.arialyy.aria.util.Configuration;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -52,7 +52,7 @@ import java.util.Set;
   private static final String TAG = "AriaManager";
   private static final Object LOCK = new Object();
   private static volatile AriaManager INSTANCE = null;
-  private Map mTargets = new HashMap<>();
+  private Map mDownloadTargets = new HashMap<>();
   private DownloadManager mManager;
   private LifeCallback mLifeCallback;
 
@@ -70,8 +70,8 @@ import java.util.Set;
     return INSTANCE;
   }
 
-  AMReceiver get(Object obj) {
-    return getTarget(obj);
+  DownloadReceiver download(Object obj) {
+    return getDownloadTarget(obj);
   }
 
   /**
@@ -115,14 +115,15 @@ import java.util.Set;
   }
 
   /**
-   * 停止所有正在执行的任务
+   * 停止所有正在下载的任务
    */
   public void stopAllTask() {
     List allEntity = mManager.getAllDownloadEntity();
     List stopCmds = new ArrayList<>();
     for (DownloadEntity entity : allEntity) {
       if (entity.getState() == DownloadEntity.STATE_DOWNLOAD_ING) {
-        stopCmds.add(CommonUtil.createCmd(entity, CmdFactory.TASK_STOP));
+        stopCmds.add(
+            CommonUtil.createDownloadCmd(new DownloadTaskEntity(entity), CmdFactory.TASK_STOP));
       }
     }
     mManager.setCmds(stopCmds).exe();
@@ -181,20 +182,21 @@ import java.util.Set;
     List allEntity = mManager.getAllDownloadEntity();
     List cancelCmds = new ArrayList<>();
     for (DownloadEntity entity : allEntity) {
-      cancelCmds.add(CommonUtil.createCmd(entity, CmdFactory.TASK_CANCEL));
+      cancelCmds.add(
+          CommonUtil.createDownloadCmd(new DownloadTaskEntity(entity), CmdFactory.TASK_CANCEL));
     }
     mManager.setCmds(cancelCmds).exe();
-    Set keys = mTargets.keySet();
+    Set keys = mDownloadTargets.keySet();
     for (String key : keys) {
-      AMReceiver target = mTargets.get(key);
+      DownloadReceiver target = mDownloadTargets.get(key);
       target.removeSchedulerListener();
-      mTargets.remove(key);
+      mDownloadTargets.remove(key);
     }
   }
 
-  private AMReceiver putTarget(Object obj) {
+  private DownloadReceiver putTarget(Object obj) {
     String clsName = obj.getClass().getName();
-    AMReceiver target = null;
+    DownloadReceiver target = null;
     String key = "";
     if (!(obj instanceof Activity)) {
       if (obj instanceof android.support.v4.app.Fragment) {
@@ -224,11 +226,11 @@ import java.util.Set;
     if (TextUtils.isEmpty(key)) {
       throw new IllegalArgumentException("未知类型");
     }
-    target = mTargets.get(key);
+    target = mDownloadTargets.get(key);
     if (target == null) {
-      target = new AMReceiver();
+      target = new DownloadReceiver();
       target.targetName = obj.getClass().getName();
-      mTargets.put(key, target);
+      mDownloadTargets.put(key, target);
     }
     return target;
   }
@@ -243,7 +245,7 @@ import java.util.Set;
           (PopupWindow.OnDismissListener) dismissField.get(popupWindow);
       if (listener != null) {
         Log.e(TAG, "你已经对PopupWindow设置了Dismiss事件。为了防止内存泄露,"
-            + "请在dismiss方法中调用Aria.whit(this).removeSchedulerListener();来注销事件");
+            + "请在dismiss方法中调用Aria.download(this).removeSchedulerListener();来注销事件");
       } else {
         popupWindow.setOnDismissListener(createPopupWindowListener(popupWindow));
       }
@@ -276,7 +278,7 @@ import java.util.Set;
         Message cancelMsg = (Message) cancelField.get(dialog);
         if (cancelMsg != null) {
           Log.e(TAG, "你已经对Dialog设置了Dismiss和cancel事件。为了防止内存泄露,"
-              + "请在dismiss方法中调用Aria.whit(this).removeSchedulerListener();来注销事件");
+              + "请在dismiss方法中调用Aria.download(this).removeSchedulerListener();来注销事件");
         } else {
           dialog.setOnCancelListener(createCancelListener());
         }
@@ -288,8 +290,8 @@ import java.util.Set;
     }
   }
 
-  private AMReceiver getTarget(Object obj) {
-    AMReceiver target = mTargets.get(obj.getClass().getName());
+  private DownloadReceiver getDownloadTarget(Object obj) {
+    DownloadReceiver target = mDownloadTargets.get(obj.getClass().getName());
     if (target == null) {
       target = putTarget(obj);
     }
@@ -335,17 +337,15 @@ import java.util.Set;
    * onDestroy
    */
   private void destroySchedulerListener(Object obj) {
-    Set keys = mTargets.keySet();
+    Set keys = mDownloadTargets.keySet();
     String clsName = obj.getClass().getName();
-    for (Iterator> iter = mTargets.entrySet().iterator();
+    for (
+        Iterator> iter = mDownloadTargets.entrySet().iterator();
         iter.hasNext(); ) {
-      Map.Entry entry = iter.next();
+      Map.Entry entry = iter.next();
       String key = entry.getKey();
       if (key.equals(clsName) || key.contains(clsName)) {
-        AMReceiver receiver = mTargets.get(key);
-        if (receiver.obj != null) {
-          if (receiver.obj instanceof Application || receiver.obj instanceof Service) break;
-        }
+        DownloadReceiver receiver = mDownloadTargets.get(key);
         receiver.removeSchedulerListener();
         receiver.destroy();
         iter.remove();
diff --git a/Aria/src/main/java/com/arialyy/aria/core/DownloadManager.java b/Aria/src/main/java/com/arialyy/aria/core/DownloadManager.java
index 12640284..d8119bb8 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/DownloadManager.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/DownloadManager.java
@@ -19,7 +19,7 @@ package com.arialyy.aria.core;
 import android.content.Context;
 import com.arialyy.aria.core.queue.ITaskQueue;
 import com.arialyy.aria.orm.DbUtil;
-import com.arialyy.aria.core.command.IDownloadCmd;
+import com.arialyy.aria.core.command.download.IDownloadCmd;
 import com.arialyy.aria.core.queue.DownloadTaskQueue;
 import com.arialyy.aria.orm.DbEntity;
 import com.arialyy.aria.util.Configuration;
diff --git a/Aria/src/main/java/com/arialyy/aria/core/DownloadTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/DownloadTaskEntity.java
new file mode 100644
index 00000000..02517f71
--- /dev/null
+++ b/Aria/src/main/java/com/arialyy/aria/core/DownloadTaskEntity.java
@@ -0,0 +1,19 @@
+package com.arialyy.aria.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by Aria.Lao on 2017/1/23.
+ * 下载任务实体
+ */
+public class DownloadTaskEntity {
+
+  public DownloadEntity downloadEntity;
+  public RequestEnum requestEnum = RequestEnum.GET;
+  public Map headers = new HashMap<>();
+
+  public DownloadTaskEntity(DownloadEntity downloadEntity) {
+    this.downloadEntity = downloadEntity;
+  }
+}
diff --git a/Aria/src/main/java/com/arialyy/aria/core/RequestEnum.java b/Aria/src/main/java/com/arialyy/aria/core/RequestEnum.java
index 43423f82..1919a949 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/RequestEnum.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/RequestEnum.java
@@ -7,7 +7,7 @@ package com.arialyy.aria.core;
 public enum RequestEnum {
   GET("GET"), POST("POST");
 
-  String name;
+  public String name;
 
   RequestEnum(String name) {
     this.name = name;
diff --git a/Aria/src/main/java/com/arialyy/aria/core/TaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/TaskEntity.java
deleted file mode 100644
index 0cc6be80..00000000
--- a/Aria/src/main/java/com/arialyy/aria/core/TaskEntity.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.arialyy.aria.core;
-
-/**
- * Created by Aria.Lao on 2017/1/23.
- * 任务实体
- */
-public class TaskEntity {
-  public DownloadEntity downloadEntity;
-  public RequestEnum requestEnum = RequestEnum.GET;
-}
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/SingleCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/SingleCmd.java
deleted file mode 100644
index f7bbe04e..00000000
--- a/Aria/src/main/java/com/arialyy/aria/core/command/SingleCmd.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.arialyy.aria.core.command;
-
-import android.util.Log;
-import com.arialyy.aria.core.DownloadEntity;
-import com.arialyy.aria.core.task.Task;
-
-/**
- * Created by lyy on 2016/11/30.
- * 获取任务状态命令
- */
-class SingleCmd extends IDownloadCmd {
-  /**
-   * @param entity 下载实体
-   */
-  SingleCmd(String target, DownloadEntity entity) {
-    super(target, entity);
-  }
-
-  SingleCmd(DownloadEntity entity) {
-    super(entity);
-  }
-
-  @Override public void executeCmd() {
-    Task task = mQueue.getTask(mEntity);
-    if (task == null) {
-      task = mQueue.createTask(mTargetName, mEntity);
-    } else {
-      Log.w(TAG, "添加命令执行失败,【该任务已经存在】");
-    }
-    task.setTargetName(mTargetName);
-    mQueue.startTask(task);
-  }
-}
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/AddCmd.java
similarity index 79%
rename from Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/AddCmd.java
index 320d916f..3a919edb 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/AddCmd.java
@@ -14,10 +14,11 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import android.util.Log;
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.task.Task;
 
 /**
@@ -26,16 +27,16 @@ import com.arialyy.aria.core.task.Task;
  */
 class AddCmd extends IDownloadCmd {
 
-  AddCmd(DownloadEntity entity) {
+  AddCmd(DownloadTaskEntity entity) {
     super(entity);
   }
 
-  AddCmd(String target, DownloadEntity entity) {
-    super(target, entity);
+  AddCmd(String targetName, DownloadTaskEntity entity) {
+    super(targetName, entity);
   }
 
   @Override public void executeCmd() {
-    Task task = mQueue.getTask(mEntity);
+    Task task = mQueue.getTask(mEntity.downloadEntity);
     if (task == null) {
       mQueue.createTask(mTargetName, mEntity);
     } else {
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/CancelCmd.java
similarity index 79%
rename from Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/CancelCmd.java
index 333e03fc..686c1521 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/CancelCmd.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.task.Task;
 
 /**
@@ -25,16 +26,16 @@ import com.arialyy.aria.core.task.Task;
  */
 class CancelCmd extends IDownloadCmd {
 
-  CancelCmd(String target, DownloadEntity entity) {
-    super(target, entity);
-  }
-
-  CancelCmd(DownloadEntity entity) {
+  CancelCmd(DownloadTaskEntity entity) {
     super(entity);
   }
 
+  CancelCmd(String targetName, DownloadTaskEntity entity) {
+    super(targetName, entity);
+  }
+
   @Override public void executeCmd() {
-    Task task = mQueue.getTask(mEntity);
+    Task task = mQueue.getTask(mEntity.downloadEntity);
     if (task == null) {
       task = mQueue.createTask(mTargetName, mEntity);
     }
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/CmdFactory.java
similarity index 80%
rename from Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/CmdFactory.java
index 786fb9dc..a6f5f3aa 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/CmdFactory.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 
 /**
  * Created by Lyy on 2016/9/23.
@@ -66,7 +67,7 @@ public class CmdFactory {
    * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link
    * #TASK_STOP}
    */
-  public IDownloadCmd createCmd(DownloadEntity entity, int type) {
+  public IDownloadCmd createCmd(DownloadTaskEntity entity, int type) {
     switch (type) {
       case TASK_CREATE:
         return createAddCmd(entity);
@@ -78,7 +79,7 @@ public class CmdFactory {
       case TASK_STOP:
         return createStopCmd(entity);
       case TASK_SINGLE:
-        return new SingleCmd(entity);
+        //return new SingleCmd(entity);
       default:
         return null;
     }
@@ -90,7 +91,7 @@ public class CmdFactory {
    * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link
    * #TASK_STOP}
    */
-  public IDownloadCmd createCmd(String target, DownloadEntity entity, int type) {
+  public IDownloadCmd createCmd(String target, DownloadTaskEntity entity, int type) {
     switch (type) {
       case TASK_CREATE:
         return createAddCmd(target, entity);
@@ -102,7 +103,7 @@ public class CmdFactory {
       case TASK_STOP:
         return createStopCmd(target, entity);
       case TASK_SINGLE:
-        return new SingleCmd(target, entity);
+        //return new SingleCmd(target, entity);
       default:
         return null;
     }
@@ -113,7 +114,7 @@ public class CmdFactory {
    *
    * @return {@link StopCmd}
    */
-  private StopCmd createStopCmd(String target, DownloadEntity entity) {
+  private StopCmd createStopCmd(String target, DownloadTaskEntity entity) {
     return new StopCmd(target, entity);
   }
 
@@ -122,7 +123,7 @@ public class CmdFactory {
    *
    * @return {@link StopCmd}
    */
-  private StopCmd createStopCmd(DownloadEntity entity) {
+  private StopCmd createStopCmd(DownloadTaskEntity entity) {
     return new StopCmd(entity);
   }
 
@@ -131,7 +132,7 @@ public class CmdFactory {
    *
    * @return {@link AddCmd}
    */
-  private AddCmd createAddCmd(String target, DownloadEntity entity) {
+  private AddCmd createAddCmd(String target, DownloadTaskEntity entity) {
     return new AddCmd(target, entity);
   }
 
@@ -140,7 +141,7 @@ public class CmdFactory {
    *
    * @return {@link AddCmd}
    */
-  private AddCmd createAddCmd(DownloadEntity entity) {
+  private AddCmd createAddCmd(DownloadTaskEntity entity) {
     return new AddCmd(entity);
   }
 
@@ -149,7 +150,7 @@ public class CmdFactory {
    *
    * @return {@link StartCmd}
    */
-  private StartCmd createStartCmd(String target, DownloadEntity entity) {
+  private StartCmd createStartCmd(String target, DownloadTaskEntity entity) {
     return new StartCmd(target, entity);
   }
 
@@ -158,7 +159,7 @@ public class CmdFactory {
    *
    * @return {@link StartCmd}
    */
-  private StartCmd createStartCmd(DownloadEntity entity) {
+  private StartCmd createStartCmd(DownloadTaskEntity entity) {
     return new StartCmd(entity);
   }
 
@@ -167,7 +168,7 @@ public class CmdFactory {
    *
    * @return {@link CancelCmd}
    */
-  private CancelCmd createCancelCmd(String target, DownloadEntity entity) {
+  private CancelCmd createCancelCmd(String target, DownloadTaskEntity entity) {
     return new CancelCmd(target, entity);
   }
 
@@ -176,7 +177,7 @@ public class CmdFactory {
    *
    * @return {@link CancelCmd}
    */
-  private CancelCmd createCancelCmd(DownloadEntity entity) {
+  private CancelCmd createCancelCmd(DownloadTaskEntity entity) {
     return new CancelCmd(entity);
   }
 }
\ No newline at end of file
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/IDownloadCmd.java
similarity index 82%
rename from Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/IDownloadCmd.java
index 0bd6a313..f9bb1bd7 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/IDownloadCmd.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import com.arialyy.aria.core.DownloadManager;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.queue.ITaskQueue;
 import com.arialyy.aria.util.CheckUtil;
 import com.arialyy.aria.util.CommonUtil;
@@ -28,22 +29,22 @@ import com.arialyy.aria.core.DownloadEntity;
  */
 public abstract class IDownloadCmd {
   ITaskQueue mQueue;
-  DownloadEntity mEntity;
+  DownloadTaskEntity mEntity;
   String TAG;
   String mTargetName;
 
   /**
    * @param entity 下载实体
    */
-  IDownloadCmd(DownloadEntity entity) {
+  IDownloadCmd(DownloadTaskEntity entity) {
     this(null, entity);
   }
 
   /**
    * @param targetName 产生任务的对象名
    */
-  IDownloadCmd(String targetName, DownloadEntity entity) {
-    if (!CheckUtil.checkDownloadEntity(entity)) {
+  IDownloadCmd(String targetName, DownloadTaskEntity entity) {
+    if (!CheckUtil.checkDownloadEntity(entity.downloadEntity)) {
       return;
     }
     mTargetName = targetName;
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/download/SingleCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/SingleCmd.java
new file mode 100644
index 00000000..d9eb246e
--- /dev/null
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/SingleCmd.java
@@ -0,0 +1,48 @@
+///*
+// * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
+// *
+// * Licensed under the Apache License, Version 2.0 (the "License");
+// * you may not use this file except in compliance with the License.
+// * You may obtain a copy of the License at
+// *
+// *      http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing, software
+// * distributed under the License is distributed on an "AS IS" BASIS,
+// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// * See the License for the specific language governing permissions and
+// * limitations under the License.
+// */
+//package com.arialyy.aria.core.command.download;
+//
+//import android.util.Log;
+//import com.arialyy.aria.core.DownloadEntity;
+//import com.arialyy.aria.core.task.Task;
+//
+///**
+// * Created by lyy on 2016/11/30.
+// * 获取任务状态命令
+// */
+//class SingleCmd extends IDownloadCmd {
+//  /**
+//   * @param entity 下载实体
+//   */
+//  SingleCmd(String target, DownloadEntity entity) {
+//    super(target, entity);
+//  }
+//
+//  SingleCmd(DownloadEntity entity) {
+//    super(entity);
+//  }
+//
+//  @Override public void executeCmd() {
+//    Task task = mQueue.getTask(mEntity);
+//    if (task == null) {
+//      task = mQueue.createTask(mTargetName, mEntity);
+//    } else {
+//      Log.w(TAG, "添加命令执行失败,【该任务已经存在】");
+//    }
+//    task.setTargetName(mTargetName);
+//    mQueue.startTask(task);
+//  }
+//}
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/StartCmd.java
similarity index 79%
rename from Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/StartCmd.java
index 11c2dfc2..038df58e 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/StartCmd.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.task.Task;
 
 /**
@@ -25,16 +26,16 @@ import com.arialyy.aria.core.task.Task;
  */
 class StartCmd extends IDownloadCmd {
 
-  StartCmd(String target, DownloadEntity entity) {
-    super(target, entity);
-  }
-
-  StartCmd(DownloadEntity entity) {
+  StartCmd(DownloadTaskEntity entity) {
     super(entity);
   }
 
+  StartCmd(String targetName, DownloadTaskEntity entity) {
+    super(targetName, entity);
+  }
+
   @Override public void executeCmd() {
-    Task task = mQueue.getTask(mEntity);
+    Task task = mQueue.getTask(mEntity.downloadEntity);
     if (task == null) {
       task = mQueue.createTask(mTargetName, mEntity);
     }
diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/download/StopCmd.java
similarity index 78%
rename from Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java
rename to Aria/src/main/java/com/arialyy/aria/core/command/download/StopCmd.java
index 676e8da7..1ec50551 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/command/download/StopCmd.java
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 
-package com.arialyy.aria.core.command;
+package com.arialyy.aria.core.command.download;
 
 import android.text.TextUtils;
 import android.util.Log;
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.task.Task;
 
 /**
@@ -27,21 +28,18 @@ import com.arialyy.aria.core.task.Task;
  */
 class StopCmd extends IDownloadCmd {
 
-  /**
-   * @param entity 下载实体
-   */
-  StopCmd(String target, DownloadEntity entity) {
-    super(target, entity);
-  }
-
-  StopCmd(DownloadEntity entity) {
+  StopCmd(DownloadTaskEntity entity) {
     super(entity);
   }
 
+  StopCmd(String targetName, DownloadTaskEntity entity) {
+    super(targetName, entity);
+  }
+
   @Override public void executeCmd() {
-    Task task = mQueue.getTask(mEntity);
+    Task task = mQueue.getTask(mEntity.downloadEntity);
     if (task == null) {
-      if (mEntity.getState() == DownloadEntity.STATE_DOWNLOAD_ING) {
+      if (mEntity.downloadEntity.getState() == DownloadEntity.STATE_DOWNLOAD_ING) {
         task = mQueue.createTask(mTargetName, mEntity);
         mQueue.stopTask(task);
       } else {
diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java
index de033a65..52dc5e0f 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java
@@ -20,10 +20,10 @@ import android.content.Context;
 import android.text.TextUtils;
 import android.util.Log;
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.queue.pool.CachePool;
 import com.arialyy.aria.core.queue.pool.ExecutePool;
 import com.arialyy.aria.core.scheduler.DownloadSchedulers;
-import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
 import com.arialyy.aria.core.task.Task;
 import com.arialyy.aria.core.task.TaskFactory;
 import com.arialyy.aria.util.Configuration;
@@ -146,7 +146,7 @@ public class DownloadTaskQueue implements ITaskQueue {
     }
   }
 
-  @Override public Task createTask(String target, DownloadEntity entity) {
+  @Override public Task createTask(String target, DownloadTaskEntity entity) {
     Task task;
     if (TextUtils.isEmpty(target)) {
       task =
diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java
index 68576119..58ad3260 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java
@@ -17,6 +17,7 @@
 package com.arialyy.aria.core.queue;
 
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
 import com.arialyy.aria.core.task.Task;
 
@@ -46,11 +47,11 @@ public interface ITaskQueue extends IDownloader {
   /**
    * 创建一个新的下载任务,创建时只是将新任务存储到缓存池
    *
-   * @param entity 下载实体{@link DownloadEntity}
+   * @param entity 下载实体{@link DownloadTaskEntity}
    * @param targetName 生成该任务的对象
    * @return {@link Task}
    */
-  public Task createTask(String targetName, DownloadEntity entity);
+  public Task createTask(String targetName, DownloadTaskEntity entity);
 
   /**
    * 通过下载链接从缓存池或任务池搜索下载任务,如果缓存池或任务池都没有任务,则创建新任务
diff --git a/Aria/src/main/java/com/arialyy/aria/core/AMReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/receiver/DownloadReceiver.java
similarity index 82%
rename from Aria/src/main/java/com/arialyy/aria/core/AMReceiver.java
rename to Aria/src/main/java/com/arialyy/aria/core/receiver/DownloadReceiver.java
index 5ae43a1a..5ba5e251 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/AMReceiver.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/receiver/DownloadReceiver.java
@@ -13,9 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.arialyy.aria.core;
+package com.arialyy.aria.core.receiver;
 
 import android.support.annotation.NonNull;
+import com.arialyy.aria.core.AMTarget;
+import com.arialyy.aria.core.DownloadEntity;
 import com.arialyy.aria.core.scheduler.DownloadSchedulers;
 import com.arialyy.aria.core.scheduler.OnSchedulerListener;
 import com.arialyy.aria.util.CheckUtil;
@@ -24,10 +26,9 @@ import com.arialyy.aria.util.CheckUtil;
  * Created by lyy on 2016/12/5.
  * AM 接收器
  */
-public class AMReceiver {
-  String              targetName;
-  OnSchedulerListener listener;
-  Object              obj;
+public class DownloadReceiver {
+  public String targetName;
+  public OnSchedulerListener listener;
 
   /**
    * {@link #load(String)},请使用该方法
@@ -53,7 +54,7 @@ public class AMReceiver {
   /**
    * 添加调度器回调
    */
-  public AMReceiver addSchedulerListener(OnSchedulerListener listener) {
+  public DownloadReceiver addSchedulerListener(OnSchedulerListener listener) {
     this.listener = listener;
     DownloadSchedulers.getInstance().addSchedulerListener(targetName, listener);
     return this;
@@ -62,14 +63,14 @@ public class AMReceiver {
   /**
    * 移除回调
    */
-  public AMReceiver removeSchedulerListener() {
+  public DownloadReceiver removeSchedulerListener() {
     if (listener != null) {
       DownloadSchedulers.getInstance().removeSchedulerListener(targetName, listener);
     }
     return this;
   }
 
-  void destroy() {
+  public void destroy() {
     targetName = null;
     listener = null;
   }
diff --git a/Aria/src/main/java/com/arialyy/aria/core/receiver/IReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/receiver/IReceiver.java
new file mode 100644
index 00000000..bf25c280
--- /dev/null
+++ b/Aria/src/main/java/com/arialyy/aria/core/receiver/IReceiver.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.arialyy.aria.core.receiver;
+
+/**
+ * Created by Aria.Lao on 2017/2/6.
+ */
+
+public interface IReceiver {
+
+}
diff --git a/Aria/src/main/java/com/arialyy/aria/core/receiver/UploadReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/receiver/UploadReceiver.java
new file mode 100644
index 00000000..cc3329a7
--- /dev/null
+++ b/Aria/src/main/java/com/arialyy/aria/core/receiver/UploadReceiver.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.arialyy.aria.core.receiver;
+
+/**
+ * Created by Aria.Lao on 2017/2/6.
+ */
+
+public class UploadReceiver implements IReceiver {
+
+}
\ No newline at end of file
diff --git a/Aria/src/main/java/com/arialyy/aria/core/task/ConnectionHelp.java b/Aria/src/main/java/com/arialyy/aria/core/task/ConnectionHelp.java
index 8d264d5a..bf0b44e9 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/task/ConnectionHelp.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/task/ConnectionHelp.java
@@ -15,6 +15,7 @@
  */
 package com.arialyy.aria.core.task;
 
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.util.CAConfiguration;
 import com.arialyy.aria.util.SSLContextUtil;
 import java.io.IOException;
@@ -22,6 +23,7 @@ import java.net.HttpURLConnection;
 import java.net.ProtocolException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.Set;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocketFactory;
@@ -60,8 +62,15 @@ class ConnectionHelp {
    *
    * @throws ProtocolException
    */
-  static HttpURLConnection setConnectParam(HttpURLConnection conn) throws ProtocolException {
-    conn.setRequestMethod("GET");
+  static HttpURLConnection setConnectParam(DownloadTaskEntity entity, HttpURLConnection conn)
+      throws ProtocolException {
+    conn.setRequestMethod(entity.requestEnum.name);
+    if (entity.headers != null && entity.headers.size() > 0) {
+      Set keys = entity.headers.keySet();
+      for (String key : keys) {
+        conn.setRequestProperty(key, entity.headers.get(key));
+      }
+    }
     conn.setRequestProperty("Charset", "UTF-8");
     conn.setRequestProperty("User-Agent",
         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
diff --git a/Aria/src/main/java/com/arialyy/aria/core/task/DownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/task/DownloadUtil.java
index 21c8af7c..b38db976 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/task/DownloadUtil.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/task/DownloadUtil.java
@@ -20,6 +20,8 @@ import android.content.Context;
 import android.util.Log;
 import android.util.SparseArray;
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
+import com.arialyy.aria.util.CheckUtil;
 import com.arialyy.aria.util.CommonUtil;
 import java.io.File;
 import java.io.IOException;
@@ -48,20 +50,23 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
   private boolean isSupportBreakpoint = true;
   private Context mContext;
   private DownloadEntity mDownloadEntity;
+  private DownloadTaskEntity mDownloadTaskEntity;
   private ExecutorService mFixedThreadPool;
   private File mDownloadFile; //下载的文件
   private File mConfigFile;//下载信息配置文件
   private SparseArray mTask = new SparseArray<>();
   private DownloadStateConstance mConstance;
 
-  DownloadUtil(Context context, DownloadEntity entity, IDownloadListener downloadListener) {
+  DownloadUtil(Context context, DownloadTaskEntity entity, IDownloadListener downloadListener) {
     this(context, entity, downloadListener, 3);
   }
 
-  DownloadUtil(Context context, DownloadEntity entity, IDownloadListener downloadListener,
+  DownloadUtil(Context context, DownloadTaskEntity entity, IDownloadListener downloadListener,
       int threadNum) {
+    CheckUtil.checkDownloadEntity(entity.downloadEntity);
+    mDownloadEntity = entity.downloadEntity;
     mContext = context.getApplicationContext();
-    mDownloadEntity = entity;
+    mDownloadTaskEntity = entity;
     mListener = downloadListener;
     THREAD_NUM = threadNum;
     mFixedThreadPool = Executors.newFixedThreadPool(Integer.MAX_VALUE);
@@ -70,7 +75,7 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
   }
 
   private void init() {
-    mDownloadFile = new File(mDownloadEntity.getDownloadPath());
+    mDownloadFile = new File(mDownloadTaskEntity.downloadEntity.getDownloadPath());
     //读取已完成的线程数
     mConfigFile = new File(
         mContext.getFilesDir().getPath() + "/temp/" + mDownloadFile.getName() + ".properties");
@@ -196,7 +201,7 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
     try {
       URL url = new URL(mDownloadEntity.getDownloadUrl());
       HttpURLConnection conn = ConnectionHelp.handleConnection(url);
-      conn = ConnectionHelp.setConnectParam(conn);
+      conn = ConnectionHelp.setConnectParam(mDownloadTaskEntity, conn);
       conn.setRequestProperty("Range", "bytes=" + 0 + "-");
       conn.setConnectTimeout(mConnectTimeOut * 4);
       conn.connect();
@@ -251,6 +256,7 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
       entity.END_LOCATION = entity.FILE_SIZE;
       entity.CONFIG_FILE_PATH = mConfigFile.getPath();
       entity.isSupportBreakpoint = isSupportBreakpoint;
+      entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity;
       SingleThreadTask task = new SingleThreadTask(mConstance, mListener, entity);
       mFixedThreadPool.execute(task);
       mListener.onStart(0);
@@ -336,6 +342,7 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
       entity.END_LOCATION = endL;
       entity.CONFIG_FILE_PATH = mConfigFile.getPath();
       entity.isSupportBreakpoint = isSupportBreakpoint;
+      entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity;
       SingleThreadTask task = new SingleThreadTask(mConstance, mListener, entity);
       mTask.put(i, task);
     }
@@ -366,5 +373,6 @@ final class DownloadUtil implements IDownloadUtil, Runnable {
     File TEMP_FILE;
     boolean isSupportBreakpoint = true;
     String CONFIG_FILE_PATH;
+    DownloadTaskEntity DOWNLOAD_TASK_ENTITY;
   }
 }
\ No newline at end of file
diff --git a/Aria/src/main/java/com/arialyy/aria/core/task/SingleThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/task/SingleThreadTask.java
index d305d98c..2f6afc82 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/task/SingleThreadTask.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/task/SingleThreadTask.java
@@ -70,7 +70,7 @@ final class SingleThreadTask implements Runnable {
       } else {
         Log.w(TAG, "该下载不支持断点,即将重新下载");
       }
-      conn = ConnectionHelp.setConnectParam(conn);
+      conn = ConnectionHelp.setConnectParam(mConfigEntity.DOWNLOAD_TASK_ENTITY, conn);
       conn.setConnectTimeout(mConstance.CONNECT_TIME_OUT);
       conn.setReadTimeout(mConstance.READ_TIME_OUT);  //设置读取流的等待时间,必须设置该参数
       is = conn.getInputStream();
@@ -87,7 +87,6 @@ final class SingleThreadTask implements Runnable {
           break;
         }
         if (mConstance.isStop) {
-          Log.i(TAG, "stop");
           break;
         }
         //把下载数据数据写入文件
diff --git a/Aria/src/main/java/com/arialyy/aria/core/task/Task.java b/Aria/src/main/java/com/arialyy/aria/core/task/Task.java
index 016ab8ef..5f930cb3 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/task/Task.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/task/Task.java
@@ -21,11 +21,11 @@ import android.content.Intent;
 import android.os.Handler;
 import android.util.Log;
 import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.DownloadManager;
-import com.arialyy.aria.core.TaskEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.scheduler.DownloadSchedulers;
 import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
 import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.util.CheckUtil;
 import com.arialyy.aria.util.CommonUtil;
 import com.arialyy.aria.util.Configuration;
 import java.lang.ref.WeakReference;
@@ -39,23 +39,25 @@ public class Task {
   /**
    * 产生该任务对象的hash码
    */
-  private String            mTargetName;
-  private DownloadEntity    mEntity;
+  private String mTargetName;
+  private DownloadEntity mEntity;
+  private DownloadTaskEntity mTaskEntity;
   private IDownloadListener mListener;
-  private Handler           mOutHandler;
-  private Context           mContext;
-  private IDownloadUtil     mUtil;
+  private Handler mOutHandler;
+  private Context mContext;
+  private IDownloadUtil mUtil;
 
-  private Task(Context context, DownloadEntity entity, Handler outHandler) {
+  private Task(Context context, DownloadTaskEntity taskEntity, Handler outHandler) {
     mContext = context.getApplicationContext();
-    mEntity = entity;
+    mTaskEntity = taskEntity;
+    mEntity = taskEntity.downloadEntity;
     mOutHandler = outHandler;
     init();
   }
 
   private void init() {
     mListener = new DListener(mContext, this, mOutHandler);
-    mUtil = new DownloadUtil(mContext, mEntity, mListener);
+    mUtil = new DownloadUtil(mContext, mTaskEntity, mListener);
   }
 
   /**
@@ -162,21 +164,21 @@ public class Task {
   }
 
   static class Builder {
-    DownloadEntity downloadEntity;
-    Handler        outHandler;
-    Context        context;
+    DownloadTaskEntity taskEntity;
+    Handler outHandler;
+    Context context;
     int threadNum = 3;
-    String        targetName;
-    IDownloadUtil downloadUtil;
+    String targetName;
 
-    public Builder(Context context, DownloadEntity downloadEntity) {
+    public Builder(Context context, DownloadTaskEntity downloadEntity) {
       this("", context, downloadEntity);
     }
 
-    Builder(String targetName, Context context, DownloadEntity downloadEntity) {
+    Builder(String targetName, Context context, DownloadTaskEntity taskEntity) {
+      CheckUtil.checkDownloadEntity(taskEntity.downloadEntity);
       this.targetName = targetName;
       this.context = context;
-      this.downloadEntity = downloadEntity;
+      this.taskEntity = taskEntity;
     }
 
     /**
@@ -198,9 +200,9 @@ public class Task {
     }
 
     public Task build() {
-      Task task = new Task(context, downloadEntity, outHandler);
+      Task task = new Task(context, taskEntity, outHandler);
       task.setTargetName(targetName);
-      downloadEntity.save();
+      taskEntity.downloadEntity.save();
       return task;
     }
   }
@@ -210,16 +212,16 @@ public class Task {
    */
   private static class DListener extends DownloadListener {
     WeakReference outHandler;
-    WeakReference    wTask;
-    Context                context;
-    Intent                 sendIntent;
-    long    INTERVAL      = 1024 * 10;   //10k大小的间隔
-    long    lastLen       = 0;   //上一次发送长度
-    long    lastTime      = 0;
-    long    INTERVAL_TIME = 1000;   //1m更新周期
-    boolean isFirst       = true;
+    WeakReference wTask;
+    Context context;
+    Intent sendIntent;
+    long INTERVAL = 1024 * 10;   //10k大小的间隔
+    long lastLen = 0;   //上一次发送长度
+    long lastTime = 0;
+    long INTERVAL_TIME = 1000;   //1m更新周期
+    boolean isFirst = true;
     DownloadEntity downloadEntity;
-    Task           task;
+    Task task;
 
     DListener(Context context, Task task, Handler outHandler) {
       this.context = context;
diff --git a/Aria/src/main/java/com/arialyy/aria/core/task/TaskFactory.java b/Aria/src/main/java/com/arialyy/aria/core/task/TaskFactory.java
index 8cc1b710..a27217fb 100644
--- a/Aria/src/main/java/com/arialyy/aria/core/task/TaskFactory.java
+++ b/Aria/src/main/java/com/arialyy/aria/core/task/TaskFactory.java
@@ -17,7 +17,7 @@
 package com.arialyy.aria.core.task;
 
 import android.content.Context;
-import com.arialyy.aria.core.DownloadEntity;
+import com.arialyy.aria.core.DownloadTaskEntity;
 import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
 
 /**
@@ -27,7 +27,7 @@ import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
 public class TaskFactory {
   private static final String TAG = "TaskFactory";
 
-  private static final    Object      LOCK     = new Object();
+  private static final Object LOCK = new Object();
   private static volatile TaskFactory INSTANCE = null;
 
   private TaskFactory() {
@@ -46,14 +46,19 @@ public class TaskFactory {
   /**
    * 创建普通下载任务
    *
-   * @param entity 下载实体
+   * @param entity 下载任务实体{@link DownloadTaskEntity}
    * @param schedulers {@link IDownloadSchedulers}
    */
-  public Task createTask(Context context, DownloadEntity entity, IDownloadSchedulers schedulers) {
+  public Task createTask(Context context, DownloadTaskEntity entity,
+      IDownloadSchedulers schedulers) {
     return createTask("", context, entity, schedulers);
   }
 
-  public Task createTask(String targetName, Context context, DownloadEntity entity,
+  /**
+   * @param entity 下载任务实体{@link DownloadTaskEntity}
+   * @param schedulers {@link IDownloadSchedulers}
+   */
+  public Task createTask(String targetName, Context context, DownloadTaskEntity entity,
       IDownloadSchedulers schedulers) {
     Task.Builder builder = new Task.Builder(targetName, context, entity);
     builder.setOutHandler(schedulers);
diff --git a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java
index 5326a0a6..16ba16ba 100644
--- a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java
+++ b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java
@@ -31,6 +31,13 @@ import java.util.regex.Pattern;
 public class CheckUtil {
   private static final String TAG = "CheckUtil";
 
+  /**
+   * 判空
+   */
+  public static void checkNull(Object obj) {
+    if (obj == null) throw new IllegalArgumentException("不能传入空对象");
+  }
+
   /**
    * 检查sql的expression是否合法
    */
@@ -47,14 +54,14 @@ public class CheckUtil {
     }
     Pattern pattern = Pattern.compile("\\?");
     Matcher matcher = pattern.matcher(where);
-    int     count   = 0;
+    int count = 0;
     while (matcher.find()) {
       count++;
     }
-    if (count < expression.length - 1){
+    if (count < expression.length - 1) {
       throw new IllegalArgumentException("条件语句的?个数不能小于参数个数");
     }
-    if (count > expression.length - 1){
+    if (count > expression.length - 1) {
       throw new IllegalArgumentException("条件语句的?个数不能大于参数个数");
     }
   }
@@ -90,7 +97,7 @@ public class CheckUtil {
       fileName = fileName.replace(" ", "_");
     }
     String dPath = entity.getDownloadPath();
-    File   file  = new File(dPath);
+    File file = new File(dPath);
     if (file.isDirectory()) {
       dPath += fileName;
       entity.setDownloadPath(dPath);
diff --git a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java
index 3031b232..e640883e 100644
--- a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java
+++ b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java
@@ -21,9 +21,10 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.net.Uri;
 import android.util.Log;
-import com.arialyy.aria.core.command.CmdFactory;
+import com.arialyy.aria.core.DownloadTaskEntity;
+import com.arialyy.aria.core.command.download.CmdFactory;
 import com.arialyy.aria.core.DownloadEntity;
-import com.arialyy.aria.core.command.IDownloadCmd;
+import com.arialyy.aria.core.command.download.IDownloadCmd;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -40,11 +41,11 @@ import java.util.Properties;
 public class CommonUtil {
   private static final String TAG = "util";
 
-  public static IDownloadCmd createCmd(String target, DownloadEntity entity, int cmd) {
+  public static IDownloadCmd createDownloadCmd(String target, DownloadTaskEntity entity, int cmd) {
     return CmdFactory.getInstance().createCmd(target, entity, cmd);
   }
 
-  public static IDownloadCmd createCmd(DownloadEntity entity, int cmd) {
+  public static IDownloadCmd createDownloadCmd(DownloadTaskEntity entity, int cmd) {
     return CmdFactory.getInstance().createCmd(entity, cmd);
   }
 
diff --git a/app/src/main/java/com/arialyy/simple/dialog_task/DownloadDialog.java b/app/src/main/java/com/arialyy/simple/dialog_task/DownloadDialog.java
index 8f6db116..be9d1e87 100644
--- a/app/src/main/java/com/arialyy/simple/dialog_task/DownloadDialog.java
+++ b/app/src/main/java/com/arialyy/simple/dialog_task/DownloadDialog.java
@@ -41,11 +41,11 @@ public class DownloadDialog extends AbsDialog {
 
   private void init() {
     if (Aria.get(this).taskExists(DOWNLOAD_URL)) {
-      AMTarget target = Aria.whit(this).load(DOWNLOAD_URL);
+      AMTarget target = Aria.download(this).load(DOWNLOAD_URL);
       int      p      = (int) (target.getCurrentProgress() * 100 / target.getFileSize());
       mPb.setProgress(p);
     }
-    Aria.whit(this).addSchedulerListener(new MyDialogDownloadCallback());
+    Aria.download(this).addSchedulerListener(new MyDialogDownloadCallback());
     DownloadEntity entity = Aria.get(this).getDownloadEntity(DOWNLOAD_URL);
     if (entity != null) {
       mSize.setText(CommonUtil.formatFileSize(entity.getFileSize()));
@@ -59,17 +59,17 @@ public class DownloadDialog extends AbsDialog {
   @OnClick({ R.id.start, R.id.stop, R.id.cancel }) public void onClick(View view) {
     switch (view.getId()) {
       case R.id.start:
-        Aria.whit(this)
+        Aria.download(this)
             .load(DOWNLOAD_URL)
             .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/daialog.apk")
             .setDownloadName("daialog.apk")
             .start();
         break;
       case R.id.stop:
-        Aria.whit(this).load(DOWNLOAD_URL).stop();
+        Aria.download(this).load(DOWNLOAD_URL).stop();
         break;
       case R.id.cancel:
-        Aria.whit(this).load(DOWNLOAD_URL).cancel();
+        Aria.download(this).load(DOWNLOAD_URL).cancel();
         break;
     }
   }
diff --git a/app/src/main/java/com/arialyy/simple/fragment_task/DownloadFragment.java b/app/src/main/java/com/arialyy/simple/fragment_task/DownloadFragment.java
index 19502277..44bf2faa 100644
--- a/app/src/main/java/com/arialyy/simple/fragment_task/DownloadFragment.java
+++ b/app/src/main/java/com/arialyy/simple/fragment_task/DownloadFragment.java
@@ -33,7 +33,7 @@ public class DownloadFragment extends AbsFragment {
 
   @Override protected void init(Bundle savedInstanceState) {
     if (Aria.get(this).taskExists(DOWNLOAD_URL)) {
-      AMTarget target = Aria.whit(this).load(DOWNLOAD_URL);
+      AMTarget target = Aria.download(this).load(DOWNLOAD_URL);
       int      p      = (int) (target.getCurrentProgress() * 100 / target.getFileSize());
       mPb.setProgress(p);
     }
@@ -49,23 +49,23 @@ public class DownloadFragment extends AbsFragment {
 
   @Override public void onResume() {
     super.onResume();
-    Aria.whit(this).addSchedulerListener(new DownloadFragment.MyDialogDownloadCallback());
+    Aria.download(this).addSchedulerListener(new DownloadFragment.MyDialogDownloadCallback());
   }
 
   @OnClick({ R.id.start, R.id.stop, R.id.cancel }) public void onClick(View view) {
     switch (view.getId()) {
       case R.id.start:
-        Aria.whit(this)
+        Aria.download(this)
             .load(DOWNLOAD_URL)
             .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/daialog.apk")
             .setDownloadName("daialog.apk")
             .start();
         break;
       case R.id.stop:
-        Aria.whit(this).load(DOWNLOAD_URL).stop();
+        Aria.download(this).load(DOWNLOAD_URL).stop();
         break;
       case R.id.cancel:
-        Aria.whit(this).load(DOWNLOAD_URL).cancel();
+        Aria.download(this).load(DOWNLOAD_URL).cancel();
         break;
     }
   }
diff --git a/app/src/main/java/com/arialyy/simple/multi_task/DownloadActivity.java b/app/src/main/java/com/arialyy/simple/multi_task/DownloadActivity.java
index 7e6652e4..74402096 100644
--- a/app/src/main/java/com/arialyy/simple/multi_task/DownloadActivity.java
+++ b/app/src/main/java/com/arialyy/simple/multi_task/DownloadActivity.java
@@ -36,7 +36,7 @@ public class DownloadActivity extends BaseActivity {
 
   @Override protected void onResume() {
     super.onResume();
-    Aria.whit(this).addSchedulerListener(new MySchedulerListener());
+    Aria.download(this).addSchedulerListener(new MySchedulerListener());
   }
 
   private class MySchedulerListener extends Aria.SimpleSchedulerListener {
diff --git a/app/src/main/java/com/arialyy/simple/multi_task/DownloadAdapter.java b/app/src/main/java/com/arialyy/simple/multi_task/DownloadAdapter.java
index 4ee18fde..75494f48 100644
--- a/app/src/main/java/com/arialyy/simple/multi_task/DownloadAdapter.java
+++ b/app/src/main/java/com/arialyy/simple/multi_task/DownloadAdapter.java
@@ -142,7 +142,7 @@ final class DownloadAdapter extends AbsRVAdapter {
 
   @Override protected void onResume() {
     super.onResume();
-    Aria.whit(this).addSchedulerListener(new DownloadListener());
+    Aria.download(this).addSchedulerListener(new DownloadListener());
   }
 
   @Override protected void onDestroy() {
diff --git a/app/src/main/java/com/arialyy/simple/notification/SimpleNotification.java b/app/src/main/java/com/arialyy/simple/notification/SimpleNotification.java
index 3d11fd69..b71ca512 100644
--- a/app/src/main/java/com/arialyy/simple/notification/SimpleNotification.java
+++ b/app/src/main/java/com/arialyy/simple/notification/SimpleNotification.java
@@ -6,8 +6,6 @@ import android.os.Environment;
 import android.support.v4.app.NotificationCompat;
 import com.arialyy.aria.core.Aria;
 import com.arialyy.aria.core.task.Task;
-import com.arialyy.frame.util.show.L;
-import com.arialyy.frame.util.show.T;
 import com.arialyy.simple.R;
 
 /**
@@ -36,11 +34,11 @@ public class SimpleNotification {
         .setProgress(100, 0, false)
         .setSmallIcon(R.mipmap.ic_launcher);
     mManager.notify(mNotifiyId, mBuilder.build());
-    Aria.whit(mContext).addSchedulerListener(new DownloadCallback(mBuilder, mManager));
+    Aria.download(mContext).addSchedulerListener(new DownloadCallback(mBuilder, mManager));
   }
 
   public void start() {
-    Aria.whit(mContext)
+    Aria.download(mContext)
         .load(DOWNLOAD_URL)
         .setDownloadName("notification_test.apk")
         .setDownloadPath(
@@ -49,7 +47,7 @@ public class SimpleNotification {
   }
 
   public void stop() {
-    Aria.whit(mContext).load(DOWNLOAD_URL).stop();
+    Aria.download(mContext).load(DOWNLOAD_URL).stop();
   }
 
   private static class DownloadCallback extends Aria.SimpleSchedulerListener {
diff --git a/app/src/main/java/com/arialyy/simple/pop_task/DownloadPopupWindow.java b/app/src/main/java/com/arialyy/simple/pop_task/DownloadPopupWindow.java
index 444d6767..926a8dfe 100644
--- a/app/src/main/java/com/arialyy/simple/pop_task/DownloadPopupWindow.java
+++ b/app/src/main/java/com/arialyy/simple/pop_task/DownloadPopupWindow.java
@@ -43,11 +43,11 @@ public class DownloadPopupWindow extends AbsPopupWindow {
 
   private void initWidget() {
     if (Aria.get(this).taskExists(DOWNLOAD_URL)) {
-      AMTarget target = Aria.whit(this).load(DOWNLOAD_URL);
+      AMTarget target = Aria.download(this).load(DOWNLOAD_URL);
       int      p      = (int) (target.getCurrentProgress() * 100 / target.getFileSize());
       mPb.setProgress(p);
     }
-    Aria.whit(this).addSchedulerListener(new MyDialogDownloadCallback());
+    Aria.download(this).addSchedulerListener(new MyDialogDownloadCallback());
     DownloadEntity entity = Aria.get(this).getDownloadEntity(DOWNLOAD_URL);
     if (entity != null) {
       mSize.setText(CommonUtil.formatFileSize(entity.getFileSize()));
@@ -61,17 +61,17 @@ public class DownloadPopupWindow extends AbsPopupWindow {
   @OnClick({ R.id.start, R.id.stop, R.id.cancel }) public void onClick(View view) {
     switch (view.getId()) {
       case R.id.start:
-        Aria.whit(this)
+        Aria.download(this)
             .load(DOWNLOAD_URL)
             .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/daialog.apk")
             .setDownloadName("daialog.apk")
             .start();
         break;
       case R.id.stop:
-        Aria.whit(this).load(DOWNLOAD_URL).stop();
+        Aria.download(this).load(DOWNLOAD_URL).stop();
         break;
       case R.id.cancel:
-        Aria.whit(this).load(DOWNLOAD_URL).cancel();
+        Aria.download(this).load(DOWNLOAD_URL).cancel();
         break;
     }
   }
diff --git a/app/src/main/java/com/arialyy/simple/single_task/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/single_task/SingleTaskActivity.java
index 82d62924..8915bb54 100644
--- a/app/src/main/java/com/arialyy/simple/single_task/SingleTaskActivity.java
+++ b/app/src/main/java/com/arialyy/simple/single_task/SingleTaskActivity.java
@@ -139,7 +139,7 @@ public class SingleTaskActivity extends BaseActivity {
 
   @Override protected void onResume() {
     super.onResume();
-    Aria.whit(this).addSchedulerListener(new MySchedulerListener());
+    Aria.download(this).addSchedulerListener(new MySchedulerListener());
     //registerReceiver(mReceiver, getModule(DownloadModule.class).getDownloadFilter());
   }
 
@@ -162,7 +162,7 @@ public class SingleTaskActivity extends BaseActivity {
 
   private void init() {
     if (Aria.get(this).taskExists(DOWNLOAD_URL)) {
-      AMTarget target = Aria.whit(this).load(DOWNLOAD_URL);
+      AMTarget target = Aria.download(this).load(DOWNLOAD_URL);
       int      p      = (int) (target.getCurrentProgress() * 100 / target.getFileSize());
       mPb.setProgress(p);
     }
@@ -188,11 +188,11 @@ public class SingleTaskActivity extends BaseActivity {
   }
 
   private void resume() {
-    Aria.whit(this).load(DOWNLOAD_URL).resume();
+    Aria.download(this).load(DOWNLOAD_URL).resume();
   }
 
   private void start() {
-    Aria.whit(this)
+    Aria.download(this)
         .load(DOWNLOAD_URL)
         .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk")
         .setDownloadName("test.apk")
@@ -200,11 +200,11 @@ public class SingleTaskActivity extends BaseActivity {
   }
 
   private void stop() {
-    Aria.whit(this).load(DOWNLOAD_URL).stop();
+    Aria.download(this).load(DOWNLOAD_URL).stop();
   }
 
   private void cancel() {
-    Aria.whit(this).load(DOWNLOAD_URL).cancel();
+    Aria.download(this).load(DOWNLOAD_URL).cancel();
   }
 
   private class MySchedulerListener extends Aria.SimpleSchedulerListener {