pull/330/head
laoyuyu 6 years ago
parent a33df648ab
commit ff81d43e72
  1. 139
      Aria/src/main/java/com/arialyy/aria/core/common/BaseListener.java
  2. 119
      Aria/src/main/java/com/arialyy/aria/core/download/BaseDListener.java
  3. 2
      Aria/src/main/java/com/arialyy/aria/core/download/BaseGroupTarget.java
  4. 39
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupListener.java
  5. 9
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java
  6. 35
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadListener.java
  7. 2
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java
  8. 118
      Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java
  9. 2
      Aria/src/main/java/com/arialyy/aria/orm/SqlUtil.java
  10. 2
      AriaAnnotations/src/main/java/com/arialyy/annotations/Download.java
  11. 2
      AriaAnnotations/src/main/java/com/arialyy/annotations/DownloadGroup.java
  12. 2
      AriaCompiler/src/main/java/com/arialyy/compiler/ParamObtainUtil.java
  13. 2
      AriaCompiler/src/main/java/com/arialyy/compiler/PrintLog.java
  14. 2
      AriaCompiler/src/main/java/com/arialyy/compiler/ProxyClassParam.java
  15. 2
      AriaCompiler/src/main/java/com/arialyy/compiler/TaskEnum.java
  16. 2
      DEV_LOG.md
  17. 17
      README.md
  18. 2
      app/src/main/AndroidManifest.xml
  19. 2
      app/src/main/java/com/arialyy/simple/MainActivity.java
  20. 2
      app/src/main/java/com/arialyy/simple/download/DownloadDialogFragment.java
  21. 2
      app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java
  22. 2
      app/src/main/java/com/arialyy/simple/download/KotlinDownloadActivity.kt
  23. 2
      app/src/main/java/com/arialyy/simple/download/SimpleNotification.java
  24. 2
      app/src/main/java/com/arialyy/simple/download/fragment_download/DownloadFragment.java
  25. 2
      app/src/main/java/com/arialyy/simple/download/fragment_download/FragmentActivity.java
  26. 2
      app/src/main/java/com/arialyy/simple/download/group/ChildHandleDialog.java
  27. 2
      app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java
  28. 2
      app/src/main/java/com/arialyy/simple/download/group/FTPDirDownloadActivity.java
  29. 2
      app/src/main/java/com/arialyy/simple/download/group/GroupModule.java
  30. 2
      app/src/main/java/com/arialyy/simple/download/multi_download/MultiEntity.java
  31. 2
      app/src/main/java/com/arialyy/simple/download/multi_download/MultiModule.java
  32. 2
      app/src/main/java/com/arialyy/simple/download/service_download/DownloadNotification.java
  33. 2
      app/src/main/java/com/arialyy/simple/download/service_download/DownloadService.java
  34. 2
      app/src/main/java/com/arialyy/simple/upload/FtpUploadActivity.java
  35. 2
      app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java
  36. 2
      app/src/main/java/com/arialyy/simple/widget/SubStateLinearLayout.java
  37. 2
      aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java

@ -0,0 +1,139 @@
/*
* 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.common;
import android.os.Handler;
import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.inf.AbsEntity;
import com.arialyy.aria.core.inf.AbsTask;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.inf.IEventListener;
import com.arialyy.aria.core.inf.TaskSchedulerType;
import com.arialyy.aria.core.scheduler.ISchedulers;
import com.arialyy.aria.util.CommonUtil;
import java.lang.ref.WeakReference;
public abstract class BaseListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>>
implements IEventListener {
private static final String TAG = "BaseListener";
protected WeakReference<Handler> outHandler;
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
private long mLastLen; //上一次发送长度
private boolean isFirst = true;
private TASK mTask;
private long mLastSaveTime;
protected ENTITY mEntity;
protected TASK_ENTITY mTaskEntity;
protected boolean isConvertSpeed;
protected long mUpdateInterval;
protected AriaManager manager;
protected BaseListener(TASK task, Handler outHandler) {
this.outHandler = new WeakReference<>(outHandler);
this.mTask = new WeakReference<>(task).get();
this.mEntity = mTask.getTaskEntity().getEntity();
this.mTaskEntity = mTask.getTaskEntity();
manager = AriaManager.getInstance(AriaManager.APP);
mLastLen = mEntity.getCurrentProgress();
mLastSaveTime = System.currentTimeMillis();
}
@Override public void onPre() {
saveData(IEntity.STATE_PRE, -1);
sendInState2Target(ISchedulers.PRE);
}
@Override public void onStart(long startLocation) {
saveData(IEntity.STATE_RUNNING, startLocation);
sendInState2Target(ISchedulers.START);
}
@Override public void onResume(long resumeLocation) {
saveData(IEntity.STATE_RUNNING, resumeLocation);
sendInState2Target(ISchedulers.RESUME);
}
@Override public void onProgress(long currentLocation) {
mEntity.setCurrentProgress(currentLocation);
long speed = currentLocation - mLastLen;
if (isFirst) {
speed = 0;
isFirst = false;
}
handleSpeed(speed);
sendInState2Target(ISchedulers.RUNNING);
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
saveData(IEntity.STATE_RUNNING, currentLocation);
mLastSaveTime = System.currentTimeMillis();
}
mLastLen = currentLocation;
}
@Override public void onStop(long stopLocation) {
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT
: IEntity.STATE_STOP, stopLocation);
handleSpeed(0);
sendInState2Target(ISchedulers.STOP);
}
@Override public void onComplete() {
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
handleSpeed(0);
sendInState2Target(ISchedulers.COMPLETE);
}
@Override public void onCancel() {
saveData(IEntity.STATE_CANCEL, -1);
handleSpeed(0);
sendInState2Target(ISchedulers.CANCEL);
}
@Override public void onFail(boolean needRetry) {
mEntity.setFailNum(mEntity.getFailNum() + 1);
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
handleSpeed(0);
mTask.needRetry = needRetry;
sendInState2Target(ISchedulers.FAIL);
}
private void handleSpeed(long speed) {
if (mUpdateInterval != 1000) {
speed = speed * 1000 / mUpdateInterval;
}
if (isConvertSpeed) {
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
}
mEntity.setSpeed(speed < 0 ? 0 : speed);
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
}
/**
* 将任务状态发送给下载器
*
* @param state {@link ISchedulers#START}
*/
protected void sendInState2Target(int state) {
if (outHandler.get() != null) {
outHandler.get().obtainMessage(state, mTask).sendToTarget();
}
}
protected abstract void saveData(int state, long location);
}

@ -16,53 +16,27 @@
package com.arialyy.aria.core.download; package com.arialyy.aria.core.download;
import android.os.Handler; import android.os.Handler;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.BaseListener;
import com.arialyy.aria.core.common.TaskRecord; import com.arialyy.aria.core.common.TaskRecord;
import com.arialyy.aria.core.inf.AbsEntity;
import com.arialyy.aria.core.inf.AbsTask;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.inf.IDownloadListener; import com.arialyy.aria.core.inf.IDownloadListener;
import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.inf.TaskSchedulerType;
import com.arialyy.aria.core.scheduler.ISchedulers; import com.arialyy.aria.core.scheduler.ISchedulers;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import java.lang.ref.WeakReference;
/** /**
* 下载监听类 * 下载监听类
*/ */
class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>> class BaseDListener extends BaseListener<DownloadEntity, DownloadTaskEntity, DownloadTask>
implements IDownloadListener { implements IDownloadListener {
private static final String TAG = "BaseDListener"; private static final String TAG = "BaseDListener";
WeakReference<Handler> outHandler;
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
private long mLastLen; //上一次发送长度
private boolean isFirst = true;
protected ENTITY mEntity;
protected TASK_ENTITY mTaskEntity;
private TASK mTask;
private boolean isConvertSpeed;
private long mLastSaveTime;
private long mUpdateInterval;
BaseDListener(TASK task, Handler outHandler) { BaseDListener(DownloadTask task, Handler outHandler) {
this.outHandler = new WeakReference<>(outHandler); super(task, outHandler);
this.mTask = new WeakReference<>(task).get();
this.mEntity = mTask.getTaskEntity().getEntity();
this.mTaskEntity = mTask.getTaskEntity();
final AriaManager manager = AriaManager.getInstance(AriaManager.APP);
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed(); isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
mLastLen = mEntity.getCurrentProgress();
mLastSaveTime = System.currentTimeMillis();
mUpdateInterval = manager.getDownloadConfig().getUpdateInterval(); mUpdateInterval = manager.getDownloadConfig().getUpdateInterval();
} }
@Override public void onPre() {
saveData(IEntity.STATE_PRE, -1);
sendInState2Target(ISchedulers.PRE);
}
@Override public void onPostPre(long fileSize) { @Override public void onPostPre(long fileSize) {
mEntity.setFileSize(fileSize); mEntity.setFileSize(fileSize);
mEntity.setConvertFileSize(CommonUtil.formatFileSize(fileSize)); mEntity.setConvertFileSize(CommonUtil.formatFileSize(fileSize));
@ -74,84 +48,8 @@ class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
} }
@Override public void onStart(long startLocation) { @Override
saveData(IEntity.STATE_RUNNING, startLocation); protected void saveData(int state, long location) {
sendInState2Target(ISchedulers.START);
}
@Override public void onResume(long resumeLocation) {
saveData(IEntity.STATE_RUNNING, resumeLocation);
sendInState2Target(ISchedulers.RESUME);
}
@Override public void onProgress(long currentLocation) {
mEntity.setCurrentProgress(currentLocation);
long speed = currentLocation - mLastLen;
if (isFirst) {
speed = 0;
isFirst = false;
}
handleSpeed(speed);
sendInState2Target(ISchedulers.RUNNING);
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
saveData(IEntity.STATE_RUNNING, currentLocation);
mLastSaveTime = System.currentTimeMillis();
}
mLastLen = currentLocation;
}
@Override public void onStop(long stopLocation) {
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT : IEntity.STATE_STOP, stopLocation);
handleSpeed(0);
sendInState2Target(ISchedulers.STOP);
}
@Override public void onCancel() {
saveData(IEntity.STATE_CANCEL, -1);
handleSpeed(0);
sendInState2Target(ISchedulers.CANCEL);
}
@Override public void onComplete() {
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
handleSpeed(0);
sendInState2Target(ISchedulers.COMPLETE);
}
@Override public void onFail(boolean needRetry) {
mEntity.setFailNum(mEntity.getFailNum() + 1);
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
handleSpeed(0);
mTask.needRetry = needRetry;
sendInState2Target(ISchedulers.FAIL);
}
private void handleSpeed(long speed) {
if (mUpdateInterval != 1000) {
speed = speed * 1000 / mUpdateInterval;
}
if (isConvertSpeed) {
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
}
mEntity.setSpeed(speed < 0 ? 0 : speed);
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
}
/**
* 将任务状态发送给下载器
*
* @param state {@link ISchedulers#START}
*/
private void sendInState2Target(int state) {
if (outHandler.get() != null) {
outHandler.get().obtainMessage(state, mTask).sendToTarget();
}
}
private void saveData(int state, long location) {
mTaskEntity.setState(state); mTaskEntity.setState(state);
mEntity.setState(state); mEntity.setState(state);
mEntity.setComplete(state == IEntity.STATE_COMPLETE); mEntity.setComplete(state == IEntity.STATE_COMPLETE);
@ -160,14 +58,11 @@ class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
TaskRecord record = TaskRecord record =
DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey()); DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey());
if (record != null) { if (record != null) {
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), (DownloadEntity) mEntity); CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), mEntity);
} else { } else {
mEntity.deleteData(); mEntity.deleteData();
} }
} else if (mEntity instanceof DownloadGroupEntity) {
CommonUtil.delGroupTaskRecord(mTaskEntity.isRemoveFile(), ((DownloadGroupEntity) mEntity));
} }
//mEntity.deleteData();
return; return;
} else if (state == IEntity.STATE_STOP) { } else if (state == IEntity.STATE_STOP) {
mEntity.setStopTime(System.currentTimeMillis()); mEntity.setStopTime(System.currentTimeMillis());

@ -25,7 +25,7 @@ import java.io.File;
import java.util.List; import java.util.List;
/** /**
* Created by Aria.Lao on 2017/7/26. * Created by lyy on 2017/7/26.
*/ */
abstract class BaseGroupTarget<TARGET extends BaseGroupTarget> abstract class BaseGroupTarget<TARGET extends BaseGroupTarget>
extends AbsDownloadTarget<TARGET, DownloadGroupEntity, DownloadGroupTaskEntity> { extends AbsDownloadTarget<TARGET, DownloadGroupEntity, DownloadGroupTaskEntity> {

@ -16,17 +16,20 @@
package com.arialyy.aria.core.download; package com.arialyy.aria.core.download;
import android.os.Handler; import android.os.Handler;
import com.arialyy.aria.core.common.BaseListener;
import com.arialyy.aria.core.download.downloader.IDownloadGroupListener; import com.arialyy.aria.core.download.downloader.IDownloadGroupListener;
import com.arialyy.aria.core.inf.GroupSendParams; import com.arialyy.aria.core.inf.GroupSendParams;
import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.scheduler.ISchedulers; import com.arialyy.aria.core.scheduler.ISchedulers;
import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil;
/** /**
* Created by Aria.Lao on 2017/7/20. * Created by Aria.Lao on 2017/7/20.
* 任务组下载事件 * 任务组下载事件
*/ */
class DownloadGroupListener class DownloadGroupListener
extends BaseDListener<DownloadGroupEntity, DownloadGroupTaskEntity, DownloadGroupTask> extends BaseListener<DownloadGroupEntity, DownloadGroupTaskEntity, DownloadGroupTask>
implements IDownloadGroupListener { implements IDownloadGroupListener {
private final String TAG = "DownloadGroupListener"; private final String TAG = "DownloadGroupListener";
private GroupSendParams<DownloadGroupTask, DownloadEntity> mSeedEntity; private GroupSendParams<DownloadGroupTask, DownloadEntity> mSeedEntity;
@ -35,6 +38,8 @@ class DownloadGroupListener
super(task, outHandler); super(task, outHandler);
mSeedEntity = new GroupSendParams<>(); mSeedEntity = new GroupSendParams<>();
mSeedEntity.groupTask = task; mSeedEntity.groupTask = task;
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
mUpdateInterval = manager.getDownloadConfig().getUpdateInterval();
} }
@Override public void onSubPre(DownloadEntity subEntity) { @Override public void onSubPre(DownloadEntity subEntity) {
@ -100,4 +105,36 @@ class DownloadGroupListener
mEntity.setCurrentProgress(location); mEntity.setCurrentProgress(location);
mEntity.update(); mEntity.update();
} }
@Override public void onPostPre(long fileSize) {
mEntity.setFileSize(fileSize);
mEntity.setConvertFileSize(CommonUtil.formatFileSize(fileSize));
saveData(IEntity.STATE_POST_PRE, -1);
sendInState2Target(ISchedulers.POST_PRE);
}
@Override public void supportBreakpoint(boolean support) {
}
@Override protected void saveData(int state, long location) {
mTaskEntity.setState(state);
mEntity.setState(state);
mEntity.setComplete(state == IEntity.STATE_COMPLETE);
if (state == IEntity.STATE_CANCEL) {
if (mEntity instanceof DownloadGroupEntity) {
CommonUtil.delGroupTaskRecord(mTaskEntity.isRemoveFile(), mEntity);
}
return;
} else if (state == IEntity.STATE_STOP) {
mEntity.setStopTime(System.currentTimeMillis());
} else if (mEntity.isComplete()) {
mEntity.setCompleteTime(System.currentTimeMillis());
mEntity.setCurrentProgress(mEntity.getFileSize());
}
if (location > 0) {
mEntity.setCurrentProgress(location);
}
mTaskEntity.update();
}
} }

@ -262,15 +262,16 @@ public class DownloadGroupTarget extends BaseGroupTarget<DownloadGroupTarget> im
if (!newName.equals(entity.getFileName())) { if (!newName.equals(entity.getFileName())) {
String oldPath = mEntity.getDirPath() + "/" + entity.getFileName(); String oldPath = mEntity.getDirPath() + "/" + entity.getFileName();
String newPath = mEntity.getDirPath() + "/" + newName; String newPath = mEntity.getDirPath() + "/" + newName;
File oldFile = new File(oldPath);
if (oldFile.exists()) {
oldFile.renameTo(new File(newPath));
}
if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=? or isComplete='true'", newPath)) { if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=? or isComplete='true'", newPath)) {
ALog.w(TAG, String.format("更新文件名失败,路径【%s】已存在或文件已下载", newPath)); ALog.w(TAG, String.format("更新文件名失败,路径【%s】已存在或文件已下载", newPath));
return; return;
} }
File oldFile = new File(oldPath);
if (oldFile.exists()) {
oldFile.renameTo(new File(newPath));
}
CommonUtil.modifyTaskRecord(oldFile.getPath(), newPath); CommonUtil.modifyTaskRecord(oldFile.getPath(), newPath);
entity.setDownloadPath(newPath); entity.setDownloadPath(newPath);
taskEntity.setKey(newPath); taskEntity.setKey(newPath);

@ -1,35 +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.download;
import android.os.Handler;
import com.arialyy.aria.core.inf.IDownloadListener;
/**
* Created by Aria.Lao on 2017/7/20.
* 普通任务下载的事件监听器
*/
class DownloadListener extends BaseDListener<DownloadEntity, DownloadTaskEntity, DownloadTask>
implements IDownloadListener {
DownloadListener(DownloadTask task, Handler outHandler) {
super(task, outHandler);
}
@Override public void supportBreakpoint(boolean support) {
}
}

@ -37,7 +37,7 @@ public class DownloadTask extends AbsNormalTask<DownloadEntity, DownloadTaskEnti
mTaskEntity = taskEntity; mTaskEntity = taskEntity;
mOutHandler = outHandler; mOutHandler = outHandler;
mContext = AriaManager.APP; mContext = AriaManager.APP;
mListener = new DownloadListener(this, mOutHandler); mListener = new BaseDListener(this, mOutHandler);
mUtil = new SimpleDownloadUtil(taskEntity, (IDownloadListener) mListener); mUtil = new SimpleDownloadUtil(taskEntity, (IDownloadListener) mListener);
mEntity = taskEntity.getEntity(); mEntity = taskEntity.getEntity();
} }

@ -16,129 +16,27 @@
package com.arialyy.aria.core.upload; package com.arialyy.aria.core.upload;
import android.os.Handler; import android.os.Handler;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.BaseListener;
import com.arialyy.aria.core.common.TaskRecord; import com.arialyy.aria.core.common.TaskRecord;
import com.arialyy.aria.core.inf.AbsEntity;
import com.arialyy.aria.core.inf.AbsTask;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.inf.IUploadListener; import com.arialyy.aria.core.inf.IUploadListener;
import com.arialyy.aria.core.inf.TaskSchedulerType;
import com.arialyy.aria.core.scheduler.ISchedulers;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import java.lang.ref.WeakReference;
/** /**
* 下载监听类 * 下载监听类
*/ */
class BaseUListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>> class BaseUListener extends BaseListener<UploadEntity, UploadTaskEntity, UploadTask>
implements IUploadListener { implements IUploadListener {
private WeakReference<Handler> outHandler;
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
private long mLastLen = 0; //上一次发送长度
private boolean isFirst = true;
protected ENTITY mEntity;
protected TASK_ENTITY mTaskEntity;
protected TASK mTask;
private boolean isConvertSpeed = false;
private long mLastSaveTime;
private long mUpdateInterval;
BaseUListener(TASK task, Handler outHandler) { BaseUListener(UploadTask task, Handler outHandler) {
this.outHandler = new WeakReference<>(outHandler); super(task, outHandler);
this.mTask = new WeakReference<>(task).get(); isConvertSpeed = manager.getUploadConfig().isConvertSpeed();
this.mEntity = this.mTask.getTaskEntity().getEntity();
this.mTaskEntity = this.mTask.getTaskEntity();
final AriaManager manager = AriaManager.getInstance(AriaManager.APP);
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
mLastLen = mEntity.getCurrentProgress();
mLastSaveTime = System.currentTimeMillis();
mUpdateInterval = manager.getUploadConfig().getUpdateInterval(); mUpdateInterval = manager.getUploadConfig().getUpdateInterval();
} }
@Override public void onPre() { @Override
saveData(IEntity.STATE_PRE, -1); protected void saveData(int state, long location) {
sendInState2Target(ISchedulers.PRE);
}
@Override public void onStart(long startLocation) {
saveData(IEntity.STATE_RUNNING, startLocation);
sendInState2Target(ISchedulers.START);
}
@Override public void onResume(long resumeLocation) {
saveData(IEntity.STATE_RUNNING, resumeLocation);
sendInState2Target(ISchedulers.RESUME);
}
@Override public void onProgress(long currentLocation) {
mEntity.setCurrentProgress(currentLocation);
long speed = currentLocation - mLastLen;
if (isFirst) {
speed = 0;
isFirst = false;
}
handleSpeed(speed);
sendInState2Target(ISchedulers.RUNNING);
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
saveData(IEntity.STATE_RUNNING, currentLocation);
mLastSaveTime = System.currentTimeMillis();
}
mLastLen = currentLocation;
}
@Override public void onStop(long stopLocation) {
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT
: IEntity.STATE_STOP, stopLocation);
handleSpeed(0);
sendInState2Target(ISchedulers.STOP);
}
@Override public void onCancel() {
saveData(IEntity.STATE_CANCEL, -1);
handleSpeed(0);
sendInState2Target(ISchedulers.CANCEL);
}
@Override public void onComplete() {
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
handleSpeed(0);
sendInState2Target(ISchedulers.COMPLETE);
}
@Override public void onFail(boolean needRetry) {
mEntity.setFailNum(mEntity.getFailNum() + 1);
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
handleSpeed(0);
mTask.needRetry = needRetry;
sendInState2Target(ISchedulers.FAIL);
}
private void handleSpeed(long speed) {
if (mUpdateInterval != 1000) {
speed = speed * 1000 / mUpdateInterval;
}
if (isConvertSpeed) {
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
}
mEntity.setSpeed(speed < 0 ? 0 : speed);
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
}
/**
* 将任务状态发送给下载器
*
* @param state {@link ISchedulers#START}
*/
private void sendInState2Target(int state) {
if (outHandler.get() != null) {
outHandler.get().obtainMessage(state, mTask).sendToTarget();
}
}
private void saveData(int state, long location) {
mTaskEntity.setState(state); mTaskEntity.setState(state);
mEntity.setState(state); mEntity.setState(state);
mEntity.setComplete(state == IEntity.STATE_COMPLETE); mEntity.setComplete(state == IEntity.STATE_COMPLETE);
@ -147,7 +45,7 @@ class BaseUListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
TaskRecord record = TaskRecord record =
DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey()); DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey());
if (record != null) { if (record != null) {
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), (UploadEntity) mEntity); CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), mEntity);
} }
} }
//else if (mEntity instanceof AbsGroupEntity) { //else if (mEntity instanceof AbsGroupEntity) {

@ -35,7 +35,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* Created by Aria.Lao on 2017/7/24. * Created by lyy on 2017/7/24.
* sql工具 * sql工具
*/ */
final class SqlUtil { final class SqlUtil {

@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** /**
* Created by Aria.Lao on 2017/6/6. * Created by lyy on 2017/6/6.
* Aria下载事件被注解的方法中参数仅能有一个参数类型为{@link com.arialyy.aria.core.download.DownloadTask} * Aria下载事件被注解的方法中参数仅能有一个参数类型为{@link com.arialyy.aria.core.download.DownloadTask}
* <pre> * <pre>
* <code> * <code>

@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** /**
* Created by Aria.Lao on 2017/6/6. * Created by lyy on 2017/6/6.
* Aria下载事件被注解的方法中参数仅能有一个参数类型为{@link com.arialyy.aria.core.download.DownloadGroupTask} * Aria下载事件被注解的方法中参数仅能有一个参数类型为{@link com.arialyy.aria.core.download.DownloadGroupTask}
* <pre> * <pre>
* <code> * <code>

@ -33,7 +33,7 @@ import javax.lang.model.element.VariableElement;
import javax.lang.model.util.Elements; import javax.lang.model.util.Elements;
/** /**
* Created by Aria.Lao on 2017/9/6. * Created by lyy on 2017/9/6.
* 构建代理文件的参数获取工具 * 构建代理文件的参数获取工具
*/ */
class ParamObtainUtil { class ParamObtainUtil {

@ -20,7 +20,7 @@ import javax.lang.model.element.Element;
import javax.tools.Diagnostic; import javax.tools.Diagnostic;
/** /**
* Created by Aria.Lao on 2017/6/6. * Created by lyy on 2017/6/6.
*/ */
class PrintLog { class PrintLog {

@ -21,7 +21,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* Created by Aria.Lao on 2017/6/7. * Created by lyy on 2017/6/7.
* 代理类参数 * 代理类参数
*/ */
class ProxyClassParam { class ProxyClassParam {

@ -16,7 +16,7 @@
package com.arialyy.compiler; package com.arialyy.compiler;
/** /**
* Created by Aria.Lao on 2017/7/10. * Created by lyy on 2017/7/10.
* 任务类型枚举 * 任务类型枚举
*/ */
enum TaskEnum { enum TaskEnum {

@ -6,7 +6,9 @@
- fix bug https://github.com/AriaLyy/Aria/issues/306 - fix bug https://github.com/AriaLyy/Aria/issues/306
- fix bug https://github.com/AriaLyy/Aria/issues/272 (现在,停止所有任务,未开始的任务状态将变为停止) - fix bug https://github.com/AriaLyy/Aria/issues/272 (现在,停止所有任务,未开始的任务状态将变为停止)
- fix bug https://github.com/AriaLyy/Aria/issues/277 - fix bug https://github.com/AriaLyy/Aria/issues/277
- fix bug https://github.com/AriaLyy/Aria/issues/303
- 优化停止任务的速度 - 优化停止任务的速度
- 修复组合任务修改子任务文件名失败的问题
+ v_3.4.12 + v_3.4.12
- fix bug https://github.com/AriaLyy/Aria/issues/286 - fix bug https://github.com/AriaLyy/Aria/issues/286
- 优化线程池任务 - 优化线程池任务

@ -32,8 +32,8 @@ Aria有以下特点:
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion) [![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion)
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion) [![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion)
```java ```java
compile 'com.arialyy.aria:aria-core:3.4.16' compile 'com.arialyy.aria:aria-core:3.5'
annotationProcessor 'com.arialyy.aria:aria-compiler:3.4.16' annotationProcessor 'com.arialyy.aria:aria-compiler:3.5'
``` ```
如果出现android support,请将 `compile 'com.arialyy.aria:aria-core:<last-version>'`替换为 如果出现android support,请将 `compile 'com.arialyy.aria:aria-core:<last-version>'`替换为
``` ```
@ -101,9 +101,16 @@ protected void onCreate(Bundle savedInstanceState) {
### 版本日志 ### 版本日志
+ v_3.4.12 + v_3.5
- fix bug https://github.com/AriaLyy/Aria/issues/286 - fix bug https://github.com/AriaLyy/Aria/issues/302
- 优化线程池任务 - fix bug https://github.com/AriaLyy/Aria/issues/283
- fix bug https://github.com/AriaLyy/Aria/issues/305
- fix bug https://github.com/AriaLyy/Aria/issues/306
- fix bug https://github.com/AriaLyy/Aria/issues/272 (现在,停止所有任务,未开始的任务状态将变为停止)
- fix bug https://github.com/AriaLyy/Aria/issues/277
- fix bug https://github.com/AriaLyy/Aria/issues/303
- 优化停止任务的速度
- 修复组合任务修改子任务文件名失败的问题
[更多版本记录](https://github.com/AriaLyy/Aria/blob/master/DEV_LOG.md) [更多版本记录](https://github.com/AriaLyy/Aria/blob/master/DEV_LOG.md)

@ -35,7 +35,7 @@
<activity android:name=".download.multi_download.MultiDownloadActivity"/> <activity android:name=".download.multi_download.MultiDownloadActivity"/>
<activity android:name=".download.HighestPriorityActivity"/> <activity android:name=".download.HighestPriorityActivity"/>
<activity android:name=".test.TestMutilTaskSysDownload"/> <activity android:name=".test.TestMutilTaskSysDownload"/>
<!--<activity android:name=".download.group.DownloadGroupActivity"/>--> <activity android:name=".download.group.DownloadGroupActivity"/>
<activity android:name=".download.FtpDownloadActivity"/> <activity android:name=".download.FtpDownloadActivity"/>
<activity android:name=".download.group.FTPDirDownloadActivity"/> <activity android:name=".download.group.FTPDirDownloadActivity"/>
<activity android:name=".upload.HttpUploadActivity"/> <activity android:name=".upload.HttpUploadActivity"/>

@ -31,7 +31,7 @@ import com.arialyy.simple.upload.FtpUploadActivity;
import com.arialyy.simple.upload.HttpUploadActivity; import com.arialyy.simple.upload.HttpUploadActivity;
/** /**
* Created by Aria.Lao on 2017/3/1. * Created by lyy on 2017/3/1.
*/ */
public class MainActivity extends BaseActivity<ActivityMainBinding> { public class MainActivity extends BaseActivity<ActivityMainBinding> {

@ -17,7 +17,7 @@ import com.arialyy.simple.base.BaseDialog;
import com.arialyy.simple.databinding.DialogFragmentDownloadBinding; import com.arialyy.simple.databinding.DialogFragmentDownloadBinding;
/** /**
* Created by Aria.Lao on 2017/8/8. * Created by lyy on 2017/8/8.
*/ */
@SuppressLint("ValidFragment") public class DownloadDialogFragment @SuppressLint("ValidFragment") public class DownloadDialogFragment
extends BaseDialog<DialogFragmentDownloadBinding> { extends BaseDialog<DialogFragmentDownloadBinding> {

@ -31,7 +31,7 @@ import com.arialyy.simple.databinding.ActivityFtpDownloadBinding;
import java.io.File; import java.io.File;
/** /**
* Created by Aria.Lao on 2017/7/25. * Created by lyy on 2017/7/25.
* Ftp下载测试 * Ftp下载测试
*/ */
public class FtpDownloadActivity extends BaseActivity<ActivityFtpDownloadBinding> { public class FtpDownloadActivity extends BaseActivity<ActivityFtpDownloadBinding> {

@ -12,7 +12,7 @@ import com.arialyy.simple.R
import com.arialyy.simple.base.BaseActivity import com.arialyy.simple.base.BaseActivity
/** /**
* Created by Aria.Lao on 2017/10/23. * Created by lyy on 2017/10/23.
*/ */
class KotlinDownloadActivity : AppCompatActivity() { class KotlinDownloadActivity : AppCompatActivity() {

@ -26,7 +26,7 @@
//import com.arialyy.simple.R; //import com.arialyy.simple.R;
// //
///** ///**
// * Created by Aria.Lao on 2017/1/18. // * Created by lyy on 2017/1/18.
// */ // */
// //
//public class SimpleNotification { //public class SimpleNotification {

@ -35,7 +35,7 @@ import com.arialyy.simple.databinding.FragmentDownloadBinding;
import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
/** /**
* Created by Aria.Lao on 2017/1/4. * Created by lyy on 2017/1/4.
*/ */
public class DownloadFragment extends AbsFragment<FragmentDownloadBinding> { public class DownloadFragment extends AbsFragment<FragmentDownloadBinding> {
@Bind(R.id.start) Button mStart; @Bind(R.id.start) Button mStart;

@ -23,7 +23,7 @@ import com.arialyy.simple.base.BaseActivity;
import com.arialyy.simple.databinding.FragmentDownloadBinding; import com.arialyy.simple.databinding.FragmentDownloadBinding;
/** /**
* Created by Aria.Lao on 2017/1/4. * Created by lyy on 2017/1/4.
*/ */
public class FragmentActivity extends BaseActivity<FragmentDownloadBinding> { public class FragmentActivity extends BaseActivity<FragmentDownloadBinding> {

@ -39,7 +39,7 @@ import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
import java.util.List; import java.util.List;
/** /**
* Created by Aria.Lao on 2017/9/5. * Created by lyy on 2017/9/5.
*/ */
@SuppressLint("ValidFragment") public class ChildHandleDialog @SuppressLint("ValidFragment") public class ChildHandleDialog
extends BaseDialog<DialogSubTaskHandlerBinding> { extends BaseDialog<DialogSubTaskHandlerBinding> {

@ -36,7 +36,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Created by Aria.Lao on 2017/7/6. * Created by lyy on 2017/7/6.
*/ */
public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBinding> { public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBinding> {

@ -32,7 +32,7 @@ import com.arialyy.simple.databinding.ActivityDownloadGroupBinding;
import com.arialyy.simple.widget.SubStateLinearLayout; import com.arialyy.simple.widget.SubStateLinearLayout;
/** /**
* Created by Aria.Lao on 2017/7/6. * Created by lyy on 2017/7/6.
*/ */
public class FTPDirDownloadActivity extends BaseActivity<ActivityDownloadGroupBinding> { public class FTPDirDownloadActivity extends BaseActivity<ActivityDownloadGroupBinding> {
private static final String dir = "ftp://192.168.1.2:21/upload/测试"; private static final String dir = "ftp://192.168.1.2:21/upload/测试";

@ -23,7 +23,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
* Created by Aria.Lao on 2017/7/6. * Created by lyy on 2017/7/6.
*/ */
public class GroupModule extends BaseModule { public class GroupModule extends BaseModule {
public GroupModule(Context context) { public GroupModule(Context context) {

@ -19,7 +19,7 @@ import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.download.DownloadGroupEntity; import com.arialyy.aria.core.download.DownloadGroupEntity;
/** /**
* Created by Aria.Lao on 2017/7/14. * Created by lyy on 2017/7/14.
*/ */
public class MultiEntity { public class MultiEntity {
public static final int SIMPLE_DOWNLOAD = 0xa1; public static final int SIMPLE_DOWNLOAD = 0xa1;

@ -19,7 +19,7 @@ import android.content.Context;
import com.arialyy.simple.base.BaseModule; import com.arialyy.simple.base.BaseModule;
/** /**
* Created by Aria.Lao on 2017/7/14. * Created by lyy on 2017/7/14.
*/ */
public class MultiModule extends BaseModule{ public class MultiModule extends BaseModule{
public MultiModule(Context context) { public MultiModule(Context context) {

@ -22,7 +22,7 @@ import android.support.v4.app.NotificationCompat;
import com.arialyy.simple.R; import com.arialyy.simple.R;
/** /**
* Created by Aria.Lao on 2017/1/18. * Created by lyy on 2017/1/18.
*/ */
public class DownloadNotification { public class DownloadNotification {

@ -26,7 +26,7 @@ import com.arialyy.aria.core.download.DownloadTask;
import com.arialyy.frame.util.show.T; import com.arialyy.frame.util.show.T;
/** /**
* Created by Aria.Lao on 2017/4/5. * Created by lyy on 2017/4/5.
* 在服务中使用 Aria进行下载 * 在服务中使用 Aria进行下载
*/ */
public class DownloadService extends Service { public class DownloadService extends Service {

@ -31,7 +31,7 @@ import com.arialyy.simple.databinding.ActivityFtpUploadBinding;
import java.io.File; import java.io.File;
/** /**
* Created by Aria.Lao on 2017/7/28. * Created by lyy on 2017/7/28.
* Ftp 文件上传demo * Ftp 文件上传demo
*/ */
public class FtpUploadActivity extends BaseActivity<ActivityFtpUploadBinding> { public class FtpUploadActivity extends BaseActivity<ActivityFtpUploadBinding> {

@ -32,7 +32,7 @@ import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
import java.io.File; import java.io.File;
/** /**
* Created by Aria.Lao on 2017/2/9. * Created by lyy on 2017/2/9.
*/ */
public class HttpUploadActivity extends BaseActivity<ActivityUploadBinding> { public class HttpUploadActivity extends BaseActivity<ActivityUploadBinding> {
private static final String TAG = "HttpUploadActivity"; private static final String TAG = "HttpUploadActivity";

@ -32,7 +32,7 @@ import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;
/** /**
* Created by Aria.Lao on 2017/7/17. * Created by lyy on 2017/7/17.
*/ */
public class SubStateLinearLayout extends LinearLayout implements View.OnClickListener { public class SubStateLinearLayout extends LinearLayout implements View.OnClickListener {
private final String TAG = "SubStateLinearLayout"; private final String TAG = "SubStateLinearLayout";

@ -31,7 +31,7 @@ public class UploadTask extends AbsNormalTask<UploadEntity, UploadTaskEntity> {
private UploadTask(UploadTaskEntity taskEntity, Handler outHandler) { private UploadTask(UploadTaskEntity taskEntity, Handler outHandler) {
mTaskEntity = taskEntity; mTaskEntity = taskEntity;
mOutHandler = outHandler; mOutHandler = outHandler;
mListener = new BaseUListener<>(this, mOutHandler); mListener = new BaseUListener(this, mOutHandler);
mUtil = new SimpleUploadUtil(taskEntity, (IUploadListener) mListener); mUtil = new SimpleUploadUtil(taskEntity, (IUploadListener) mListener);
} }

Loading…
Cancel
Save