This commit is contained in:
AriaLyy
2017-06-09 14:16:48 +08:00
parent 431fc35deb
commit 2566f37403
15 changed files with 156 additions and 11 deletions

View File

@ -23,8 +23,8 @@ dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
// compile project(':AriaCompiler')
compile project(':AriaAnnotations')
compile project(':AriaCompiler')
// compile project(':AriaAnnotations')
}
//apply from: 'jcenter.gradle'

View File

@ -83,10 +83,23 @@ class ConfigHelper extends DefaultHandler {
case "convertSpeed":
loadConvertSpeed(value);
break;
case "maxSpeed":
loadMaxSpeed(value);
break;
}
}
}
private void loadMaxSpeed(String value) {
double maxSpeed = 0.0;
if (!TextUtils.isEmpty(value)) {
maxSpeed = Double.parseDouble(value);
}
if (isDownloadConfig){
mDownloadConfig.msxSpeed = maxSpeed;
}
}
private void loadConvertSpeed(String value) {
boolean open = Boolean.parseBoolean(value);
if (isDownloadConfig) {

View File

@ -39,6 +39,16 @@ public class DownloadReceiver implements IReceiver<DownloadEntity> {
public Object obj;
public ISchedulerListener<DownloadTask> listener;
/**
* 设置最大下载速度单位kb
*
* @param maxSpeed 为0表示不限速
*/
public void setMaxSpeed(double maxSpeed) {
AriaManager.getInstance(AriaManager.APP).getDownloadConfig().setMsxSpeed(maxSpeed);
}
/**
* {@link #load(String)},请使用该方法
*/

View File

@ -88,6 +88,15 @@ public class DownloadTask extends AbsTask<DownloadTaskEntity, DownloadEntity> {
stop(true);
}
/**
* 设置最大下载速度单位kb
*
* @param maxSpeed 为0表示不限速
*/
public void setMaxSpeed(double maxSpeed) {
mUtil.setMaxSpeed(maxSpeed);
}
/**
* 开始下载
*/

View File

@ -107,6 +107,15 @@ class DownloadUtil implements IDownloadUtil, Runnable {
return CONSTANCE.isDownloading;
}
public void setMaxSpeed(double maxSpeed) {
for (int i = 0; i < THREAD_NUM; i++) {
SingleThreadTask task = (SingleThreadTask) mTask.get(i);
if (task != null) {
task.setMaxSpeed(maxSpeed);
}
}
}
/**
* 取消下载
*/

View File

@ -63,4 +63,9 @@ interface IDownloadUtil {
* 删除temp文件
*/
public void delTempFile();
/**
* 设置最大下载速度
*/
public void setMaxSpeed(double maxSpeed);
}

View File

@ -23,6 +23,7 @@ import com.arialyy.aria.util.CommonUtil;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@ -40,6 +41,10 @@ final class SingleThreadTask implements Runnable {
private int mBufSize;
private IDownloadListener mListener;
private DownloadStateConstance CONSTANCE;
/**
* speed = (bufSize / 1024) * threadNum / sleepTime; (8192 / 1024) * 4 / 1= 32 kb/s
*/
private long mSleepTime = 0;
SingleThreadTask(DownloadStateConstance constance, IDownloadListener listener,
DownloadUtil.ConfigEntity downloadInfo) {
@ -53,6 +58,15 @@ final class SingleThreadTask implements Runnable {
mConfigFPath = downloadInfo.CONFIG_FILE_PATH;
}
mBufSize = manager.getDownloadConfig().getBuffSize();
setMaxSpeed(AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getMsxSpeed());
}
void setMaxSpeed(double maxSpeed) {
if (-0.9999 < maxSpeed && maxSpeed < 0.00001) {
mSleepTime = 0;
} else {
mSleepTime = (long) ((mBufSize / 1024) * CONSTANCE.THREAD_NUM / maxSpeed * 1000);
}
}
@Override public void run() {
@ -97,6 +111,7 @@ final class SingleThreadTask implements Runnable {
if (CONSTANCE.isStop) {
break;
}
Thread.sleep(mSleepTime);
//把下载数据数据写入文件
file.write(buffer, 0, len);
progress(len);

View File

@ -91,6 +91,15 @@ public class DownloadTaskQueue
}
}
public void setMaxSpeed(double maxSpeed){
Map<String, DownloadTask> tasks = mExecutePool.getAllTask();
Set<String> keys = tasks.keySet();
for (String key : keys){
DownloadTask task = tasks.get(key);
task.setMaxSpeed(maxSpeed);
}
}
@Override public void setMaxTaskNum(int downloadNum) {
int oldMaxSize = AriaManager.getInstance(AriaManager.APP).getDownloadConfig().oldMaxTaskNum;
int diff = downloadNum - oldMaxSize;

View File

@ -84,8 +84,12 @@ public abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, ENTITY ex
AbsSchedulerListener<TASK> listener = mObservers.get(targetName);
if (listener == null) {
listener = createListener(targetName);
listener.setListener(obj);
mObservers.put(targetName, listener);
if (listener != null) {
listener.setListener(obj);
mObservers.put(targetName, listener);
} else {
Log.e(TAG, "注册错误,没有【" + targetName + "】观察者");
}
}
}