diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 276576f1..6f6d0974 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,7 +13,13 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml index 04c63e41..ba75a422 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -53,7 +53,7 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 45f2cb6a..d9fb88b4 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,7 +3,6 @@ - diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadCommand.java deleted file mode 100644 index 97d46921..00000000 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadCommand.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.arialyy.downloadutil.core; - -/** - * Created by lyy on 2016/8/14. - * 命令抽象类 - */ -public abstract class DownloadCommand { - -} diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java index 1604b2f1..e3cc4afe 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java @@ -2,15 +2,22 @@ package com.arialyy.downloadutil.core; import android.content.Context; +import com.arialyy.downloadutil.core.command.IDownloadCommand; + +import java.util.ArrayList; +import java.util.List; + /** * Created by lyy on 2016/8/11. * 下载管理器,通过命令的方式控制下载 */ public class DownloadManager { + private static final Object LOCK = new Object(); + private static volatile DownloadManager INSTANCE = null; /** * 下载开始前事件 */ - public static final String ACTION_PRE = "ACTION_PRE"; + public static final String ACTION_PRE = "ACTION_PRE"; /** * 开始下载事件 @@ -57,6 +64,12 @@ public class DownloadManager { */ public static final String CURRENT_LOCATION = "CURRENT_LOCATION"; + private List mCommands = new ArrayList<>(); + + private DownloadManager() { + + } + private Context mContext; private DownloadManager(Context context) { @@ -64,7 +77,42 @@ public class DownloadManager { } public static DownloadManager getInstance(Context context) { - return new DownloadManager(context); + if (INSTANCE == null) { + synchronized (LOCK) { + INSTANCE = new DownloadManager(context.getApplicationContext()); + } + } + return INSTANCE; + } + + /** + * 设置命令 + * + * @param command + */ + public void setCommant(IDownloadCommand command) { + mCommands.add(command); + } + + /** + * 设置一组命令 + * + * @param commands + */ + public void setCommands(List commands) { + if (commands != null && commands.size() > 0) { + mCommands.addAll(commands); + } + } + + /** + * 执行所有设置的命令 + */ + public synchronized void exe() { + for (IDownloadCommand command : mCommands) { + command.executeComment(); + } + mCommands.clear(); } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java index 23110d75..df29c245 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java @@ -77,7 +77,7 @@ public class DownloadTarget extends IDownloadTarget { if (task == null) { task = mCachePool.getTask(entity.getDownloadUrl()); } - if (task == null){ + if (task == null) { task = createTask(entity); } return task; diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java index 25e7680c..d0dfd4df 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java @@ -30,9 +30,10 @@ public class TaskFactory { /** * 创建普通下载任务 + * * @param context - * @param entity 下载实体 - * @param handler {@link com.arialyy.downloadutil.core.IDownloadTarget.AutoTaskHandler} + * @param entity 下载实体 + * @param handler {@link com.arialyy.downloadutil.core.IDownloadTarget.AutoTaskHandler} * @return */ public Task createTask(Context context, DownloadEntity entity, Handler handler) { diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/AddCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/AddCommand.java index af6a5b96..84ee878d 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/AddCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/AddCommand.java @@ -1,6 +1,7 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CancelCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CancelCommand.java index 5788db4e..afc1aea1 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CancelCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CancelCommand.java @@ -1,6 +1,7 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** @@ -9,11 +10,12 @@ import com.arialyy.downloadutil.entity.DownloadEntity; */ class CancelCommand extends IDownloadCommand { - CancelCommand(Context context, DownloadEntity entity) { - super(context, entity); - } + CancelCommand(Context context, DownloadEntity entity) { + super(context, entity); + } - @Override public void executeComment() { - target.cancelTask(target.getTask(mEntity)); - } + @Override + public void executeComment() { + target.cancelTask(target.getTask(mEntity)); + } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CommandFactory.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CommandFactory.java index f98d714f..a2ba6471 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CommandFactory.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CommandFactory.java @@ -1,6 +1,7 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** @@ -8,108 +9,108 @@ import com.arialyy.downloadutil.entity.DownloadEntity; * 命令工厂 */ public class CommandFactory { - /** - * 创建任务 - */ - public static final int TASK_CREATE = 0x122; - /** - * 启动任务 - */ - public static final int TASK_START = 0x123; - /** - * 取消任务 - */ - public static final int TASK_CANCEL = 0x124; - /** - * 停止任务 - */ - public static final int TASK_STOP = 0x125; - /** - * 获取任务状态 - */ - public static final int TASK_STATE = 0x126; + /** + * 创建任务 + */ + public static final int TASK_CREATE = 0x122; + /** + * 启动任务 + */ + public static final int TASK_START = 0x123; + /** + * 取消任务 + */ + public static final int TASK_CANCEL = 0x124; + /** + * 停止任务 + */ + public static final int TASK_STOP = 0x125; + /** + * 获取任务状态 + */ + public static final int TASK_STATE = 0x126; - private static final Object LOCK = new Object(); - private static volatile CommandFactory INSTANCE = null; + private static final Object LOCK = new Object(); + private static volatile CommandFactory INSTANCE = null; - private CommandFactory() { + private CommandFactory() { - } + } - public static CommandFactory getInstance() { - if (INSTANCE == null) { - synchronized (LOCK) { - INSTANCE = new CommandFactory(); - } + public static CommandFactory getInstance() { + if (INSTANCE == null) { + synchronized (LOCK) { + INSTANCE = new CommandFactory(); + } + } + return INSTANCE; } - return INSTANCE; - } - /** - * @param context context - * @param entity 下载实体 - * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link - * #TASK_STOP}、{@link #TASK_STATE} - */ - public IDownloadCommand createCommand(Context context, DownloadEntity entity, int type) { - switch (type) { - case TASK_CREATE: - return createAddCommand(context, entity); - case TASK_START: - return createStartCommand(context, entity); - case TASK_CANCEL: - return createCancelCommand(context, entity); - case TASK_STOP: - return createStopCommand(context, entity); - case TASK_STATE: - return createStateCommand(context, entity); - default: - return null; + /** + * @param context context + * @param entity 下载实体 + * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link + * #TASK_STOP}、{@link #TASK_STATE} + */ + public IDownloadCommand createCommand(Context context, DownloadEntity entity, int type) { + switch (type) { + case TASK_CREATE: + return createAddCommand(context, entity); + case TASK_START: + return createStartCommand(context, entity); + case TASK_CANCEL: + return createCancelCommand(context, entity); + case TASK_STOP: + return createStopCommand(context, entity); + case TASK_STATE: + return createStateCommand(context, entity); + default: + return null; + } } - } - /** - * 创建获取任务状态的命令 - * - * @return {@link StateCommand} - */ - private StateCommand createStateCommand(Context context, DownloadEntity entity) { - return new StateCommand(context, entity); - } + /** + * 创建获取任务状态的命令 + * + * @return {@link StateCommand} + */ + private StateCommand createStateCommand(Context context, DownloadEntity entity) { + return new StateCommand(context, entity); + } - /** - * 创建停止命令 - * - * @return {@link StopCommand} - */ - private StopCommand createStopCommand(Context context, DownloadEntity entity) { - return new StopCommand(context, entity); - } + /** + * 创建停止命令 + * + * @return {@link StopCommand} + */ + private StopCommand createStopCommand(Context context, DownloadEntity entity) { + return new StopCommand(context, entity); + } - /** - * 创建下载任务命令 - * - * @return {@link AddCommand} - */ - private AddCommand createAddCommand(Context context, DownloadEntity entity) { - return new AddCommand(context, entity); - } + /** + * 创建下载任务命令 + * + * @return {@link AddCommand} + */ + private AddCommand createAddCommand(Context context, DownloadEntity entity) { + return new AddCommand(context, entity); + } - /** - * 创建启动下载命令 - * - * @return {@link StartCommand} - */ - private StartCommand createStartCommand(Context context, DownloadEntity entity) { - return new StartCommand(context, entity); - } + /** + * 创建启动下载命令 + * + * @return {@link StartCommand} + */ + private StartCommand createStartCommand(Context context, DownloadEntity entity) { + return new StartCommand(context, entity); + } - /** - * 创建 取消下载的命令 - * - * @return {@link CancelCommand} - */ - private CancelCommand createCancelCommand(Context context, DownloadEntity entity) { - return new CancelCommand(context, entity); - } + /** + * 创建 取消下载的命令 + * + * @return {@link CancelCommand} + */ + private CancelCommand createCancelCommand(Context context, DownloadEntity entity) { + return new CancelCommand(context, entity); + } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCommand.java index 0e61be8f..03539f95 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCommand.java @@ -8,6 +8,7 @@ import com.arialyy.downloadutil.core.IDownloadTarget; import com.arialyy.downloadutil.entity.DownloadEntity; import com.arialyy.downloadutil.help.CheckHelp; + import java.util.List; /** @@ -16,15 +17,15 @@ import java.util.List; */ public abstract class IDownloadCommand { protected IDownloadTarget target; - protected Context mContext; - protected DownloadEntity mEntity; + protected Context mContext; + protected DownloadEntity mEntity; /** - * @param context context - * @param entity 下载实体 + * @param context context + * @param entity 下载实体 */ - protected IDownloadCommand(Context context, DownloadEntity entity){ - if (!CheckHelp.checkDownloadEntity(entity)){ + protected IDownloadCommand(Context context, DownloadEntity entity) { + if (!CheckHelp.checkDownloadEntity(entity)) { return; } target = DownloadTarget.getInstance(context); @@ -32,7 +33,7 @@ public abstract class IDownloadCommand { mEntity = entity; } - public Context getContext(){ + public Context getContext() { return mContext; } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StartCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StartCommand.java index db2c23b0..04fc5a8b 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StartCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StartCommand.java @@ -1,13 +1,14 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** * Created by lyy on 2016/8/22. * 开始命令 */ -class StartCommand extends IDownloadCommand{ +class StartCommand extends IDownloadCommand { StartCommand(Context context, DownloadEntity entity) { super(context, entity); diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCommand.java index 3447a1c0..7e052240 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCommand.java @@ -1,6 +1,7 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** @@ -9,15 +10,16 @@ import com.arialyy.downloadutil.entity.DownloadEntity; */ class StateCommand extends IDownloadCommand { - /** - * @param context context - * @param entity 下载实体 - */ - StateCommand(Context context, DownloadEntity entity) { - super(context, entity); - } + /** + * @param context context + * @param entity 下载实体 + */ + StateCommand(Context context, DownloadEntity entity) { + super(context, entity); + } - @Override public void executeComment() { - target.getTaskState(mEntity); - } + @Override + public void executeComment() { + target.getTaskState(mEntity); + } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java index 22f32bd7..7d2eaa65 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StopCommand.java @@ -1,6 +1,7 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; + import com.arialyy.downloadutil.entity.DownloadEntity; /** @@ -9,15 +10,16 @@ import com.arialyy.downloadutil.entity.DownloadEntity; */ class StopCommand extends IDownloadCommand { - /** - * @param context context - * @param entity 下载实体 - */ - StopCommand(Context context, DownloadEntity entity) { - super(context, entity); - } + /** + * @param context context + * @param entity 下载实体 + */ + StopCommand(Context context, DownloadEntity entity) { + super(context, entity); + } - @Override public void executeComment() { - target.stopTask(target.getTask(mEntity)); - } + @Override + public void executeComment() { + target.stopTask(target.getTask(mEntity)); + } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java index 241443f8..053f4f81 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java @@ -12,7 +12,7 @@ public interface ITask { /** * 创建一个新的下载任务,创建时只是将新任务存储到缓存池 * - * @param entity 下载实体{@link DownloadEntity} + * @param entity 下载实体{@link DownloadEntity} * @return {@link Task} */ public Task createTask(DownloadEntity entity); @@ -20,7 +20,7 @@ public interface ITask { /** * 通过下载链接从缓存池或任务池搜索下载任务,如果缓存池或任务池都没有任务,则创建新任务 * - * @param entity 下载实体{@link DownloadEntity} + * @param entity 下载实体{@link DownloadEntity} * @return {@link Task} */ public Task getTask(DownloadEntity entity); @@ -28,14 +28,15 @@ public interface ITask { /** * 通过下载链接搜索下载任务 * - * @param entity 下载实体{@link DownloadEntity} + * @param entity 下载实体{@link DownloadEntity} * @return {@code -1 ==> 错误},{@link com.arialyy.downloadutil.entity.DownloadEntity#STATE_FAIL} */ public int getTaskState(DownloadEntity entity); /** * 通过下载链接删除任务 - * @param entity 下载实体{@link DownloadEntity} + * + * @param entity 下载实体{@link DownloadEntity} */ public void removeTask(DownloadEntity entity); diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/CachePool.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/CachePool.java index aab9ef72..a21d7cc3 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/CachePool.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/CachePool.java @@ -78,7 +78,7 @@ public class CachePool implements IPool { Log.e(TAG, "请传入有效的下载链接"); return null; } - String key = Util.keyToHashKey(downloadUrl); + String key = Util.keyToHashKey(downloadUrl); return mCacheArray.get(key); } } @@ -104,8 +104,8 @@ public class CachePool implements IPool { Log.e(TAG, "请传入有效的下载链接"); return false; } - String key = Util.keyToHashKey(downloadUrl); - Task task = mCacheArray.get(key); + String key = Util.keyToHashKey(downloadUrl); + Task task = mCacheArray.get(key); mCacheArray.remove(key); return mCacheQueue.remove(task); } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/ExecutePool.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/ExecutePool.java index 7a8789e9..87347dc1 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/ExecutePool.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/pool/ExecutePool.java @@ -119,7 +119,7 @@ public class ExecutePool implements IPool { Log.e(TAG, "请传入有效的下载链接"); return null; } - String key = Util.keyToHashKey(downloadUrl); + String key = Util.keyToHashKey(downloadUrl); return mExecuteArray.get(key); } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/help/CheckHelp.java b/downloadutil/src/main/java/com/arialyy/downloadutil/help/CheckHelp.java index 03a1a3c5..88e3e4d8 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/help/CheckHelp.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/help/CheckHelp.java @@ -4,8 +4,10 @@ import android.app.Application; import android.content.res.Resources; import android.text.TextUtils; import android.util.Log; + import com.arialyy.downloadutil.R; import com.arialyy.downloadutil.entity.DownloadEntity; + import java.io.File; /** @@ -13,38 +15,38 @@ import java.io.File; * 检查帮助类 */ public class CheckHelp { - private static final String TAG = "CheckHelp"; + private static final String TAG = "CheckHelp"; - /** - * 检测下载实体是否合法 - * - * @param entity 下载实体 - * @return 合法(true) - */ - public static boolean checkDownloadEntity(DownloadEntity entity) { - if (entity == null) { - Log.w(TAG, Resources.getSystem().getString(R.string.error_entity_null)); - return false; - } else if (TextUtils.isEmpty(entity.getDownloadUrl())) { - Log.w(TAG, Resources.getSystem().getString(R.string.error_download_url_null)); - return false; - } else if (TextUtils.isEmpty(entity.getFileName())){ - Log.w(TAG, Resources.getSystem().getString(R.string.error_file_name_null)); - return false; - } else if (TextUtils.isEmpty(entity.getDownloadPath())){ - Log.w(TAG, Resources.getSystem().getString(R.string.error_file_name_null)); - return false; - } - String fileName = entity.getFileName(); - if (fileName.contains(" ")){ - fileName = fileName.replace(" ", "_"); - } - String dPath = entity.getDownloadPath(); - File file = new File(dPath); - if (file.isDirectory()){ - dPath += fileName; - entity.setDownloadPath(dPath); + /** + * 检测下载实体是否合法 + * + * @param entity 下载实体 + * @return 合法(true) + */ + public static boolean checkDownloadEntity(DownloadEntity entity) { + if (entity == null) { + Log.w(TAG, Resources.getSystem().getString(R.string.error_entity_null)); + return false; + } else if (TextUtils.isEmpty(entity.getDownloadUrl())) { + Log.w(TAG, Resources.getSystem().getString(R.string.error_download_url_null)); + return false; + } else if (TextUtils.isEmpty(entity.getFileName())) { + Log.w(TAG, Resources.getSystem().getString(R.string.error_file_name_null)); + return false; + } else if (TextUtils.isEmpty(entity.getDownloadPath())) { + Log.w(TAG, Resources.getSystem().getString(R.string.error_file_name_null)); + return false; + } + String fileName = entity.getFileName(); + if (fileName.contains(" ")) { + fileName = fileName.replace(" ", "_"); + } + String dPath = entity.getDownloadPath(); + File file = new File(dPath); + if (file.isDirectory()) { + dPath += fileName; + entity.setDownloadPath(dPath); + } + return true; } - return true; - } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java index ba865a04..3d2f87a2 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/orm/DbUtil.java @@ -1,4 +1,5 @@ package com.arialyy.downloadutil.orm; + import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.NonNull; @@ -13,17 +14,17 @@ import java.lang.reflect.Field; * 数据库操作工具 */ public class DbUtil { - private static final String TAG = "DbUtil"; - private volatile static DbUtil mDbUtil = null; - private int CREATE_TABLE = 0; - private int TABLE_EXISTS = 1; - private int INSERT_DATA = 2; - private int MODIFY_DATA = 3; - private int FIND_DATA = 4; - private int FIND_ALL_DATA = 5; - private int DEL_DATA = 6; - private int ROW_ID = 7; - private static final Object LOCK = new Object(); + private static final String TAG = "DbUtil"; + private volatile static DbUtil mDbUtil = null; + private int CREATE_TABLE = 0; + private int TABLE_EXISTS = 1; + private int INSERT_DATA = 2; + private int MODIFY_DATA = 3; + private int FIND_DATA = 4; + private int FIND_ALL_DATA = 5; + private int DEL_DATA = 6; + private int ROW_ID = 7; + private static final Object LOCK = new Object(); private SQLiteDatabase mDb; private DbUtil() { @@ -73,8 +74,8 @@ public class DbUtil { * 修改某行数据 */ protected void modifyData(DbEntity dbEntity) { - Class clazz = dbEntity.getClass(); - Field[] fields = Util.getFields(clazz); + Class clazz = dbEntity.getClass(); + Field[] fields = Util.getFields(clazz); if (fields != null && fields.length > 0) { StringBuilder sb = new StringBuilder(); sb.append("UPDATE ").append(Util.getClassName(dbEntity)).append(" SET "); @@ -136,8 +137,8 @@ public class DbUtil { * 插入数据 */ protected void insertData(DbEntity dbEntity) { - Class clazz = dbEntity.getClass(); - Field[] fields = Util.getFields(clazz); + Class clazz = dbEntity.getClass(); + Field[] fields = Util.getFields(clazz); if (fields != null && fields.length > 0) { StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO ").append(Util.getClassName(dbEntity)).append("("); @@ -214,7 +215,7 @@ public class DbUtil { sb.append("create table ") .append(Util.getClassName(dbEntity)) .append("("); - int i = 0; + int i = 0; int ignoreNum = 0; for (Field field : fields) { i++; @@ -322,8 +323,8 @@ public class DbUtil { i++; } print(ROW_ID, sb.toString()); - Cursor c = mDb.rawQuery(sb.toString(), null); - int id = c.getColumnIndex("rowid"); + Cursor c = mDb.rawQuery(sb.toString(), null); + int id = c.getColumnIndex("rowid"); c.close(); return id; } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/util/DownLoadUtil.java b/downloadutil/src/main/java/com/arialyy/downloadutil/util/DownLoadUtil.java index 9f3628bf..ecf46638 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/util/DownLoadUtil.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/util/DownLoadUtil.java @@ -13,6 +13,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Properties; + /** * Created by lyy on 2015/8/25. * 下载工具类 @@ -24,24 +25,27 @@ public class DownLoadUtil { /** * 线程数 */ - private static final int THREAD_NUM = 3; + private static final int THREAD_NUM = 3; /** * 已经完成下载任务的线程数量 */ - private int mCompleteThreadNum = 0; + private int mCompleteThreadNum = 0; private long mCurrentLocation; - private boolean isDownloading = false; - private boolean isStop = false; - private boolean isCancel = false; - private static final int TIME_OUT = 5000; //超时时间 + private boolean isDownloading = false; + private boolean isStop = false; + private boolean isCancel = false; + private static final int TIME_OUT = 5000; //超时时间 boolean isNewTask = true; private int mCancelNum = 0; - private int mStopNum = 0; + private int mStopNum = 0; + public DownLoadUtil() { } - public IDownloadListener getListener(){ + + public IDownloadListener getListener() { return mListener; } + /** * 获取当前下载位置 * @@ -50,21 +54,25 @@ public class DownLoadUtil { public long getCurrentLocation() { return mCurrentLocation; } + public boolean isDownloading() { return isDownloading; } + /** * 取消下载 */ public void cancelDownload() { isCancel = true; } + /** * 停止下载 */ public void stopDownload() { isStop = true; } + /** * 多线程断点续传下载文件,暂停和继续 * @@ -101,7 +109,7 @@ public class DownLoadUtil { public void run() { try { mListener = downloadListener; - URL url = new URL(downloadUrl); + URL url = new URL(downloadUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Charset", "UTF-8"); @@ -140,16 +148,16 @@ public class DownLoadUtil { } } } - int blockSize = fileLength / THREAD_NUM; - SparseArray tasks = new SparseArray<>(); - int[] recordL = new int[THREAD_NUM]; - int rl = 0; + int blockSize = fileLength / THREAD_NUM; + SparseArray tasks = new SparseArray<>(); + int[] recordL = new int[THREAD_NUM]; + int rl = 0; for (int i = 0; i < THREAD_NUM; i++) { recordL[i] = -1; } for (int i = 0; i < THREAD_NUM; i++) { - long startL = i * blockSize, endL = (i + 1) * blockSize; - Object state = pro.getProperty(dFile.getName() + "_state_" + i); + long startL = i * blockSize, endL = (i + 1) * blockSize; + Object state = pro.getProperty(dFile.getName() + "_state_" + i); if (state != null && Integer.parseInt(state + "") == 1) { //该线程已经完成 mCurrentLocation += endL - startL; Log.d(TAG, "++++++++++ 线程_" + i + "_已经下载完成 ++++++++++"); @@ -176,7 +184,7 @@ public class DownLoadUtil { startL = r; recordL[rl] = i; rl++; - }else { + } else { isNewTask = true; } if (isNewTask) { @@ -187,7 +195,7 @@ public class DownLoadUtil { endL = fileLength;//如果整个文件的大小不为线程个数的整数倍,则最后一个线程的结束位置即为文件的总长度 } DownloadEntity entity = new DownloadEntity(context, fileLength, downloadUrl, dFile, i, startL, endL); - DownLoadTask task = new DownLoadTask(entity); + DownLoadTask task = new DownLoadTask(entity); tasks.put(i, new Thread(task)); } if (mCurrentLocation > 0) { @@ -211,30 +219,34 @@ public class DownLoadUtil { } }).start(); } - private void failDownload(String msg){ + + private void failDownload(String msg) { Log.e(TAG, msg); isDownloading = false; stopDownload(); mListener.onFail(); System.gc(); } + /** * 多线程下载任务类,不能使用AsyncTask来进行多线程下载,因为AsyncTask是串行执行的,这种方式下载速度太慢了 */ private class DownLoadTask implements Runnable { private static final String TAG = "DownLoadTask"; private DownloadEntity dEntity; - private String configFPath; + private String configFPath; + public DownLoadTask(DownloadEntity downloadInfo) { this.dEntity = downloadInfo; configFPath = dEntity.context.getFilesDir().getPath() + "/temp/" + dEntity.tempFile.getName() + ".properties"; } + @Override public void run() { long currentLocation = 0; try { Log.d(TAG, "线程_" + dEntity.threadId + "_正在下载【" + "开始位置 : " + dEntity.startLocation + ",结束位置:" + dEntity.endLocation + "】"); - URL url = new URL(dEntity.downloadUrl); + URL url = new URL(dEntity.downloadUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //在头里面请求下载开始位置和结束位置 conn.setRequestProperty("Range", "bytes=" + dEntity.startLocation + "-" + dEntity.endLocation); @@ -250,7 +262,7 @@ public class DownLoadUtil { //设置每条线程写入文件的位置 file.seek(dEntity.startLocation); byte[] buffer = new byte[1024]; - int len; + int len; //当前子线程的下载位置 currentLocation = dEntity.startLocation; while ((len = is.read(buffer)) != -1) { @@ -353,30 +365,33 @@ public class DownLoadUtil { } } } + /** * 将记录写入到配置文件 * * @param record */ private void writeConfig(String key, String record) throws IOException { - File configFile = new File(configFPath); - Properties pro = Util.loadConfig(configFile); + File configFile = new File(configFPath); + Properties pro = Util.loadConfig(configFile); pro.setProperty(key, record); Util.saveConfig(configFile, pro); } } + /** * 子线程下载信息类 */ private class DownloadEntity { //文件大小 - long fileSize; - String downloadUrl; - int threadId; - long startLocation; - long endLocation; - File tempFile; + long fileSize; + String downloadUrl; + int threadId; + long startLocation; + long endLocation; + File tempFile; Context context; + public DownloadEntity(Context context, long fileSize, String downloadUrl, File file, int threadId, long startLocation, long endLocation) { this.fileSize = fileSize; this.downloadUrl = downloadUrl;