This commit is contained in:
@ -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'
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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)},请使用该方法
|
||||
*/
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始下载
|
||||
*/
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消下载
|
||||
*/
|
||||
|
@ -63,4 +63,9 @@ interface IDownloadUtil {
|
||||
* 删除temp文件
|
||||
*/
|
||||
public void delTempFile();
|
||||
|
||||
/**
|
||||
* 设置最大下载速度
|
||||
*/
|
||||
public void setMaxSpeed(double maxSpeed);
|
||||
}
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 + "】观察者");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user