parent
56af75c35c
commit
1a83617045
@ -1,441 +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; |
|
||||||
|
|
||||||
import android.text.TextUtils; |
|
||||||
import com.arialyy.aria.util.ALog; |
|
||||||
import javax.xml.validation.Validator; |
|
||||||
import org.xml.sax.Attributes; |
|
||||||
import org.xml.sax.SAXException; |
|
||||||
import org.xml.sax.helpers.DefaultHandler; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by lyy on 2017/5/22. 读取配置文件 |
|
||||||
*/ |
|
||||||
class ConfigHelper extends DefaultHandler { |
|
||||||
private final String TAG = "ConfigHelper"; |
|
||||||
|
|
||||||
private Configuration.DownloadConfig mDownloadConfig = Configuration.getInstance().downloadCfg; |
|
||||||
private Configuration.UploadConfig mUploadConfig = Configuration.getInstance().uploadCfg; |
|
||||||
private Configuration.AppConfig mAppConfig = Configuration.getInstance().appCfg; |
|
||||||
private Configuration.DGroupConfig mDGroupConfig = Configuration.getInstance().dGroupCfg; |
|
||||||
private @ConfigType int mType; |
|
||||||
|
|
||||||
@Override public void startDocument() throws SAXException { |
|
||||||
super.startDocument(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void startElement(String uri, String localName, String qName, Attributes attributes) |
|
||||||
throws SAXException { |
|
||||||
super.startElement(uri, localName, qName, attributes); |
|
||||||
switch (qName) { |
|
||||||
case "download": |
|
||||||
mType = ConfigType.DOWNLOAD; |
|
||||||
break; |
|
||||||
case "upload": |
|
||||||
mType = ConfigType.UPLOAD; |
|
||||||
break; |
|
||||||
case "app": |
|
||||||
mType = ConfigType.APP; |
|
||||||
break; |
|
||||||
case "dGroup": |
|
||||||
mType = ConfigType.D_GROUP; |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD || mType == ConfigType.UPLOAD || mType == ConfigType.D_GROUP) { |
|
||||||
|
|
||||||
String value = attributes.getValue("value"); |
|
||||||
switch (qName) { |
|
||||||
case "threadNum": |
|
||||||
loadThreadNum(value); |
|
||||||
break; |
|
||||||
case "maxTaskNum": |
|
||||||
loadMaxQueue(value); |
|
||||||
break; |
|
||||||
case "reTryNum": |
|
||||||
loadReTry(value); |
|
||||||
break; |
|
||||||
case "connectTimeOut": |
|
||||||
loadConnectTime(value); |
|
||||||
break; |
|
||||||
case "iOTimeOut": |
|
||||||
loadIOTimeout(value); |
|
||||||
break; |
|
||||||
case "reTryInterval": |
|
||||||
loadReTryInterval(value); |
|
||||||
break; |
|
||||||
case "buffSize": |
|
||||||
loadBuffSize(value); |
|
||||||
break; |
|
||||||
case "ca": |
|
||||||
String caName = attributes.getValue("name"); |
|
||||||
String caPath = attributes.getValue("path"); |
|
||||||
loadCA(caName, caPath); |
|
||||||
break; |
|
||||||
case "convertSpeed": |
|
||||||
loadConvertSpeed(value); |
|
||||||
break; |
|
||||||
case "maxSpeed": |
|
||||||
loadMaxSpeed(value); |
|
||||||
break; |
|
||||||
case "queueMod": |
|
||||||
loadQueueMod(value); |
|
||||||
break; |
|
||||||
case "updateInterval": |
|
||||||
loadUpdateInterval(value); |
|
||||||
break; |
|
||||||
case "notNetRetry": |
|
||||||
loadNotNetRetry(value); |
|
||||||
break; |
|
||||||
case "useBlock": |
|
||||||
loadUseBlock(value); |
|
||||||
break; |
|
||||||
case "subMaxTaskNum": |
|
||||||
loadSubMaxTaskNum(value); |
|
||||||
break; |
|
||||||
case "subReTryNum": |
|
||||||
loadSubReTryNum(value); |
|
||||||
break; |
|
||||||
case "subReTryInterval": |
|
||||||
loadSubReTryInterval(value); |
|
||||||
break; |
|
||||||
} |
|
||||||
} else if (mType == ConfigType.APP) { |
|
||||||
String value = attributes.getValue("value"); |
|
||||||
switch (qName) { |
|
||||||
case "useAriaCrashHandler": |
|
||||||
loadUseAriaCrashHandler(value); |
|
||||||
break; |
|
||||||
case "logLevel": |
|
||||||
loadLogLevel(value); |
|
||||||
break; |
|
||||||
case "netCheck": |
|
||||||
loadNetCheck(value); |
|
||||||
break; |
|
||||||
case "useBroadcast": |
|
||||||
loadUseBroadcast(value); |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadSubReTryInterval(String value) { |
|
||||||
int temp = checkInt(value) ? Integer.parseInt(value) : 2000; |
|
||||||
if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.subReTryInterval = temp; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadSubReTryNum(String value) { |
|
||||||
int temp = checkInt(value) ? Integer.parseInt(value) : 5; |
|
||||||
if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.subReTryNum = temp; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadSubMaxTaskNum(String value) { |
|
||||||
int temp = checkInt(value) ? Integer.parseInt(value) : 3; |
|
||||||
if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.subMaxTaskNum = temp; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadNetCheck(String value) { |
|
||||||
boolean b = checkBoolean(value), temp = false; |
|
||||||
if (b) { |
|
||||||
temp = Boolean.valueOf(value); |
|
||||||
} |
|
||||||
mAppConfig.netCheck = temp; |
|
||||||
} |
|
||||||
|
|
||||||
private void loadUseBroadcast(String value) { |
|
||||||
boolean b = checkBoolean(value), temp = false; |
|
||||||
|
|
||||||
if (b) { |
|
||||||
temp = Boolean.valueOf(value); |
|
||||||
} |
|
||||||
if (mType == ConfigType.APP) { |
|
||||||
mAppConfig.useBroadcast = temp; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadUseBlock(String value) { |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.useBlock = checkBoolean(value) ? Boolean.valueOf(value) : false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadNotNetRetry(String value) { |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.notNetRetry = checkBoolean(value) ? Boolean.valueOf(value) : false; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.notNetRetry = checkBoolean(value) ? Boolean.valueOf(value) : false; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.notNetRetry = checkBoolean(value) ? Boolean.valueOf(value) : false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadLogLevel(String value) { |
|
||||||
int level; |
|
||||||
try { |
|
||||||
level = Integer.parseInt(value); |
|
||||||
} catch (NumberFormatException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
level = ALog.LOG_LEVEL_VERBOSE; |
|
||||||
} |
|
||||||
if (level < ALog.LOG_LEVEL_VERBOSE || level > ALog.LOG_CLOSE) { |
|
||||||
ALog.w(TAG, "level【" + level + "】错误"); |
|
||||||
mAppConfig.logLevel = ALog.LOG_LEVEL_VERBOSE; |
|
||||||
} else { |
|
||||||
mAppConfig.logLevel = level; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadUseAriaCrashHandler(String value) { |
|
||||||
if (checkBoolean(value)) { |
|
||||||
mAppConfig.useAriaCrashHandler = Boolean.parseBoolean(value); |
|
||||||
} else { |
|
||||||
ALog.w(TAG, "useAriaCrashHandler【" + value + "】错误"); |
|
||||||
mAppConfig.useAriaCrashHandler = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadUpdateInterval(String value) { |
|
||||||
long temp = checkLong(value) ? Long.parseLong(value) : 1000; |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.updateInterval = temp; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.updateInterval = temp; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.updateInterval = temp; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadQueueMod(String value) { |
|
||||||
String mod = "now"; |
|
||||||
if (!TextUtils.isEmpty(value) && (value.equalsIgnoreCase("now") || value.equalsIgnoreCase( |
|
||||||
"wait"))) { |
|
||||||
mod = value; |
|
||||||
} else if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.queueMod = mod; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.queueMod = mod; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.queueMod = mod; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadMaxSpeed(String value) { |
|
||||||
int maxSpeed = checkInt(value) ? Integer.parseInt(value) : 0; |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.maxSpeed = maxSpeed; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.maxSpeed = maxSpeed; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDownloadConfig.maxSpeed = maxSpeed; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadConvertSpeed(String value) { |
|
||||||
boolean open = true; |
|
||||||
if (checkBoolean(value)) { |
|
||||||
open = Boolean.parseBoolean(value); |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.isConvertSpeed = open; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.isConvertSpeed = open; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mUploadConfig.isConvertSpeed = open; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadReTryInterval(String value) { |
|
||||||
int time = checkInt(value) ? Integer.parseInt(value) : 2 * 1000; |
|
||||||
|
|
||||||
if (time < 2 * 1000) { |
|
||||||
time = 2 * 1000; |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.reTryInterval = time; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.reTryInterval = time; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.reTryInterval = time; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadCA(String name, String path) { |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.caName = name; |
|
||||||
mDownloadConfig.caPath = path; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.caName = name; |
|
||||||
mUploadConfig.caPath = path; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.caName = name; |
|
||||||
mDGroupConfig.caPath = path; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadBuffSize(String value) { |
|
||||||
int buffSize = checkInt(value) ? Integer.parseInt(value) : 8192; |
|
||||||
|
|
||||||
if (buffSize < 2048) { |
|
||||||
buffSize = 2048; |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.buffSize = buffSize; |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.buffSize = buffSize; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadIOTimeout(String value) { |
|
||||||
int time = checkInt(value) ? Integer.parseInt(value) : 10 * 1000; |
|
||||||
|
|
||||||
if (time < 10 * 1000) { |
|
||||||
time = 10 * 1000; |
|
||||||
} |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.iOTimeOut = time; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.iOTimeOut = time; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.iOTimeOut = time; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadConnectTime(String value) { |
|
||||||
int time = checkInt(value) ? Integer.parseInt(value) : 5 * 1000; |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.connectTimeOut = time; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.connectTimeOut = time; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.connectTimeOut = time; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadReTry(String value) { |
|
||||||
int num = checkInt(value) ? Integer.parseInt(value) : 0; |
|
||||||
|
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.reTryNum = num; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.reTryNum = num; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.reTryNum = num; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadMaxQueue(String value) { |
|
||||||
int num = checkInt(value) ? Integer.parseInt(value) : 2; |
|
||||||
if (num < 1) { |
|
||||||
ALog.w(TAG, "任务队列数不能小于 1"); |
|
||||||
num = 2; |
|
||||||
} |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.maxTaskNum = num; |
|
||||||
} else if (mType == ConfigType.UPLOAD) { |
|
||||||
mUploadConfig.maxTaskNum = num; |
|
||||||
} else if (mType == ConfigType.D_GROUP) { |
|
||||||
mDGroupConfig.maxTaskNum = num; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void loadThreadNum(String value) { |
|
||||||
int num = checkInt(value) ? Integer.parseInt(value) : 3; |
|
||||||
if (num < 1) { |
|
||||||
ALog.e(TAG, "下载线程数不能小于 1"); |
|
||||||
num = 1; |
|
||||||
} |
|
||||||
if (mType == ConfigType.DOWNLOAD) { |
|
||||||
mDownloadConfig.threadNum = num; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 检查是否int值是否合法 |
|
||||||
* |
|
||||||
* @return {@code true} 合法 |
|
||||||
*/ |
|
||||||
private boolean checkInt(String value) { |
|
||||||
if (TextUtils.isEmpty(value)) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
try { |
|
||||||
Integer l = Integer.parseInt(value); |
|
||||||
return true; |
|
||||||
} catch (NumberFormatException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 检查是否long值是否合法 |
|
||||||
* |
|
||||||
* @return {@code true} 合法 |
|
||||||
*/ |
|
||||||
private boolean checkLong(String value) { |
|
||||||
if (TextUtils.isEmpty(value)) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
try { |
|
||||||
Long l = Long.parseLong(value); |
|
||||||
return true; |
|
||||||
} catch (NumberFormatException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 检查boolean值是否合法 |
|
||||||
* |
|
||||||
* @return {@code true} 合法 |
|
||||||
*/ |
|
||||||
private boolean checkBoolean(String value) { |
|
||||||
return !TextUtils.isEmpty(value) && (value.equalsIgnoreCase("true") || value.equalsIgnoreCase( |
|
||||||
"false")); |
|
||||||
} |
|
||||||
|
|
||||||
@Override public void characters(char[] ch, int start, int length) throws SAXException { |
|
||||||
super.characters(ch, start, length); |
|
||||||
} |
|
||||||
|
|
||||||
@Override public void endElement(String uri, String localName, String qName) throws SAXException { |
|
||||||
super.endElement(uri, localName, qName); |
|
||||||
} |
|
||||||
|
|
||||||
@Override public void endDocument() throws SAXException { |
|
||||||
super.endDocument(); |
|
||||||
mDownloadConfig.save(); |
|
||||||
mUploadConfig.save(); |
|
||||||
mAppConfig.save(); |
|
||||||
mDGroupConfig.save(); |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,112 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.util.ALog; |
||||||
|
import com.arialyy.aria.util.AriaCrashHandler; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 应用配置 |
||||||
|
*/ |
||||||
|
public class AppConfig extends BaseConfig implements Serializable { |
||||||
|
/** |
||||||
|
* 是否使用{@link AriaCrashHandler}来捕获异常 {@code true} 使用;{@code false} 不使用 |
||||||
|
*/ |
||||||
|
boolean useAriaCrashHandler; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置Aria的日志级别 |
||||||
|
* |
||||||
|
* {@link ALog#LOG_LEVEL_VERBOSE} |
||||||
|
*/ |
||||||
|
int logLevel; |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否检查网络,{@code true}检查网络 |
||||||
|
*/ |
||||||
|
boolean netCheck = true; |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用广播 除非无法使用注解,否则不建议使用广播来接受任务 {@code true} 使用广播,{@code false} 不适用广播 |
||||||
|
*/ |
||||||
|
boolean useBroadcast = false; |
||||||
|
|
||||||
|
/** |
||||||
|
* 断网的时候是否重试,{@code true}断网也重试;{@code false}断网不重试,直接走失败的回调 |
||||||
|
*/ |
||||||
|
boolean notNetRetry = false; |
||||||
|
|
||||||
|
public boolean isNotNetRetry() { |
||||||
|
return notNetRetry; |
||||||
|
} |
||||||
|
|
||||||
|
public AppConfig setNotNetRetry(boolean notNetRetry) { |
||||||
|
this.notNetRetry = notNetRetry; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isUseBroadcast() { |
||||||
|
return useBroadcast; |
||||||
|
} |
||||||
|
|
||||||
|
public AppConfig setUseBroadcast(boolean useBroadcast) { |
||||||
|
this.useBroadcast = useBroadcast; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isNetCheck() { |
||||||
|
return netCheck; |
||||||
|
} |
||||||
|
|
||||||
|
public AppConfig setNetCheck(boolean netCheck) { |
||||||
|
this.netCheck = netCheck; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public AppConfig setLogLevel(int level) { |
||||||
|
this.logLevel = level; |
||||||
|
ALog.LOG_LEVEL = level; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLogLevel() { |
||||||
|
return logLevel; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean getUseAriaCrashHandler() { |
||||||
|
return useAriaCrashHandler; |
||||||
|
} |
||||||
|
|
||||||
|
public AppConfig setUseAriaCrashHandler(boolean useAriaCrashHandler) { |
||||||
|
this.useAriaCrashHandler = useAriaCrashHandler; |
||||||
|
if (useAriaCrashHandler) { |
||||||
|
Thread.setDefaultUncaughtExceptionHandler(new AriaCrashHandler()); |
||||||
|
} else { |
||||||
|
Thread.setDefaultUncaughtExceptionHandler(null); |
||||||
|
} |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
@Override int getType() { |
||||||
|
return TYPE_APP; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.arialyy.aria.core.config; |
||||||
|
|
||||||
|
import android.text.TextUtils; |
||||||
|
import com.arialyy.aria.core.AriaManager; |
||||||
|
import com.arialyy.aria.util.ALog; |
||||||
|
import com.arialyy.aria.util.CommonUtil; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
abstract class BaseConfig implements Serializable { |
||||||
|
private static final String TAG = "BaseConfig"; |
||||||
|
static final int TYPE_DOWNLOAD = 1; |
||||||
|
static final int TYPE_UPLOAD = 2; |
||||||
|
static final int TYPE_APP = 3; |
||||||
|
static final int TYPE_DGROUP = 4; |
||||||
|
|
||||||
|
/** |
||||||
|
* 类型 |
||||||
|
* |
||||||
|
* @return {@link #TYPE_DOWNLOAD}、{@link #TYPE_UPLOAD}、{@link #TYPE_APP}、{@link #TYPE_DGROUP} |
||||||
|
*/ |
||||||
|
abstract int getType(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存配置 |
||||||
|
*/ |
||||||
|
void save() { |
||||||
|
String basePath = AriaManager.APP.getFilesDir().getPath(); |
||||||
|
String path = null; |
||||||
|
switch (getType()) { |
||||||
|
case TYPE_DOWNLOAD: |
||||||
|
path = Configuration.DOWNLOAD_CONFIG_FILE; |
||||||
|
break; |
||||||
|
case TYPE_UPLOAD: |
||||||
|
path = Configuration.UPLOAD_CONFIG_FILE; |
||||||
|
break; |
||||||
|
case TYPE_APP: |
||||||
|
path = Configuration.APP_CONFIG_FILE; |
||||||
|
break; |
||||||
|
case TYPE_DGROUP: |
||||||
|
path = Configuration.DGROUP_CONFIG_FILE; |
||||||
|
break; |
||||||
|
} |
||||||
|
if (!TextUtils.isEmpty(path)) { |
||||||
|
String tempPath = String.format("%s%s", basePath, path); |
||||||
|
CommonUtil.deleteFile(tempPath); |
||||||
|
CommonUtil.writeObjToFile(tempPath, this); |
||||||
|
} else { |
||||||
|
ALog.e(TAG, String.format("保存配置失败,配置类型:%s,原因:路径错误", getType())); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,221 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.core.common.QueueMod; |
||||||
|
import com.arialyy.aria.util.ALog; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 通用任务配置 |
||||||
|
*/ |
||||||
|
public abstract class BaseTaskConfig extends BaseConfig implements Serializable { |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢 |
||||||
|
*/ |
||||||
|
int buffSize = 8192; |
||||||
|
|
||||||
|
/** |
||||||
|
* 进度刷新间隔,默认1秒 |
||||||
|
*/ |
||||||
|
long updateInterval = 1000; |
||||||
|
|
||||||
|
/** |
||||||
|
* 旧任务数 |
||||||
|
*/ |
||||||
|
public int oldMaxTaskNum = 2; |
||||||
|
|
||||||
|
/** |
||||||
|
* 任务队列最大任务数, 默认为2 |
||||||
|
*/ |
||||||
|
int maxTaskNum = 2; |
||||||
|
/** |
||||||
|
* 下载失败,重试次数,默认为10 |
||||||
|
*/ |
||||||
|
int reTryNum = 10; |
||||||
|
/** |
||||||
|
* 设置重试间隔,单位为毫秒,默认2000毫秒 |
||||||
|
*/ |
||||||
|
int reTryInterval = 2000; |
||||||
|
/** |
||||||
|
* 设置url连接超时时间,单位为毫秒,默认5000毫秒 |
||||||
|
*/ |
||||||
|
int connectTimeOut = 5000; |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否需要转换速度单位,转换完成后为:1b/s、1k/s、1m/s、1g/s、1t/s,如果不需要将返回byte长度 |
||||||
|
*/ |
||||||
|
boolean isConvertSpeed = false; |
||||||
|
|
||||||
|
/** |
||||||
|
* 执行队列类型 |
||||||
|
* |
||||||
|
* @see QueueMod |
||||||
|
*/ |
||||||
|
String queueMod = "wait"; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒 |
||||||
|
*/ |
||||||
|
int iOTimeOut = 20 * 1000; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置最大下载/上传速度,单位:kb, 为0表示不限速 |
||||||
|
*/ |
||||||
|
int maxSpeed = 0; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置https ca 证书信息;path 为assets目录下的CA证书完整路径 |
||||||
|
*/ |
||||||
|
String caPath; |
||||||
|
/** |
||||||
|
* name 为CA证书名 |
||||||
|
*/ |
||||||
|
String caName; |
||||||
|
|
||||||
|
public String getCaPath() { |
||||||
|
return caPath; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseConfig setCaPath(String caPath) { |
||||||
|
this.caPath = caPath; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCaName() { |
||||||
|
return caName; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseConfig setCaName(String caName) { |
||||||
|
this.caName = caName; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setMaxTaskNum(int maxTaskNum) { |
||||||
|
oldMaxTaskNum = this.maxTaskNum; |
||||||
|
this.maxTaskNum = maxTaskNum; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getMaxSpeed() { |
||||||
|
return maxSpeed; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setMaxSpeed(int maxSpeed) { |
||||||
|
this.maxSpeed = maxSpeed; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public long getUpdateInterval() { |
||||||
|
return updateInterval; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置进度更新间隔,该设置对正在运行的任务无效,默认为1000毫秒 |
||||||
|
* |
||||||
|
* @param updateInterval 不能小于0 |
||||||
|
*/ |
||||||
|
public BaseTaskConfig setUpdateInterval(long updateInterval) { |
||||||
|
if (updateInterval <= 0) { |
||||||
|
ALog.w("Configuration", "进度更新间隔不能小于0"); |
||||||
|
return this; |
||||||
|
} |
||||||
|
this.updateInterval = updateInterval; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public String getQueueMod() { |
||||||
|
return queueMod; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setQueueMod(String queueMod) { |
||||||
|
this.queueMod = queueMod; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getMaxTaskNum() { |
||||||
|
return maxTaskNum; |
||||||
|
} |
||||||
|
|
||||||
|
public int getReTryNum() { |
||||||
|
return reTryNum; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setReTryNum(int reTryNum) { |
||||||
|
this.reTryNum = reTryNum; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getReTryInterval() { |
||||||
|
return reTryInterval; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setReTryInterval(int reTryInterval) { |
||||||
|
this.reTryInterval = reTryInterval; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isConvertSpeed() { |
||||||
|
return isConvertSpeed; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setConvertSpeed(boolean convertSpeed) { |
||||||
|
isConvertSpeed = convertSpeed; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getConnectTimeOut() { |
||||||
|
return connectTimeOut; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setConnectTimeOut(int connectTimeOut) { |
||||||
|
this.connectTimeOut = connectTimeOut; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getIOTimeOut() { |
||||||
|
return iOTimeOut; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setIOTimeOut(int iOTimeOut) { |
||||||
|
this.iOTimeOut = iOTimeOut; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getBuffSize() { |
||||||
|
return buffSize; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseTaskConfig setBuffSize(int buffSize) { |
||||||
|
this.buffSize = buffSize; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,117 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.core.AriaManager; |
||||||
|
import com.arialyy.aria.util.CommonUtil; |
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by lyy on 2016/12/8. 信息配置 kotlin 方式有bug,不能将public去掉 |
||||||
|
*/ |
||||||
|
public final class Configuration { |
||||||
|
private static final String TAG = "Configuration"; |
||||||
|
private static volatile Configuration INSTANCE = null; |
||||||
|
public static final String XML_FILE = "/Aria/aria_config.xml"; |
||||||
|
static final String DOWNLOAD_CONFIG_FILE = "/Aria/AriaDownload.cfg"; |
||||||
|
static final String UPLOAD_CONFIG_FILE = "/Aria/AriaUpload.cfg"; |
||||||
|
static final String APP_CONFIG_FILE = "/Aria/AriaApp.cfg"; |
||||||
|
static final String DGROUP_CONFIG_FILE = "/Aria/AriaDGroup.cfg"; |
||||||
|
public DownloadConfig downloadCfg; |
||||||
|
public UploadConfig uploadCfg; |
||||||
|
public AppConfig appCfg; |
||||||
|
public DGroupConfig dGroupCfg; |
||||||
|
|
||||||
|
private Configuration() { |
||||||
|
//删除老版本的配置文件
|
||||||
|
String basePath = AriaManager.APP.getFilesDir().getPath(); |
||||||
|
del351Config(basePath); |
||||||
|
File newDCfg = new File(String.format("%s%s", basePath, DOWNLOAD_CONFIG_FILE)); |
||||||
|
File newUCfg = new File(String.format("%s%s", basePath, UPLOAD_CONFIG_FILE)); |
||||||
|
File newACfg = new File(String.format("%s%s", basePath, APP_CONFIG_FILE)); |
||||||
|
File dgCfg = new File(String.format("%s%s", basePath, DGROUP_CONFIG_FILE)); |
||||||
|
// 加载下载配置
|
||||||
|
if (newDCfg.exists()) { |
||||||
|
downloadCfg = (DownloadConfig) CommonUtil.readObjFromFile(newDCfg.getPath()); |
||||||
|
} |
||||||
|
if (downloadCfg == null) { |
||||||
|
downloadCfg = new DownloadConfig(); |
||||||
|
} |
||||||
|
// 加载上传配置
|
||||||
|
if (newUCfg.exists()) { |
||||||
|
uploadCfg = (UploadConfig) CommonUtil.readObjFromFile(newUCfg.getPath()); |
||||||
|
} |
||||||
|
if (uploadCfg == null) { |
||||||
|
uploadCfg = new UploadConfig(); |
||||||
|
} |
||||||
|
// 加载app配置
|
||||||
|
if (newACfg.exists()) { |
||||||
|
appCfg = (AppConfig) CommonUtil.readObjFromFile(newACfg.getPath()); |
||||||
|
} |
||||||
|
if (appCfg == null) { |
||||||
|
appCfg = new AppConfig(); |
||||||
|
} |
||||||
|
// 加载下载类型组合任务的配置
|
||||||
|
if (dgCfg.exists()) { |
||||||
|
dGroupCfg = (DGroupConfig) CommonUtil.readObjFromFile(dgCfg.getPath()); |
||||||
|
} |
||||||
|
if (dGroupCfg == null) { |
||||||
|
dGroupCfg = new DGroupConfig(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static Configuration getInstance() { |
||||||
|
if (INSTANCE == null) { |
||||||
|
synchronized (AppConfig.class) { |
||||||
|
INSTANCE = new Configuration(); |
||||||
|
} |
||||||
|
} |
||||||
|
return INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 检查配置文件是否存在,只要{@link DownloadConfig}、{@link UploadConfig}、{@link AppConfig}、{@link |
||||||
|
* DGroupConfig}其中一个不存在 则任务配置文件不存在 |
||||||
|
* |
||||||
|
* @return {@code true}配置存在,{@code false}配置不存在 |
||||||
|
*/ |
||||||
|
public boolean configExists() { |
||||||
|
String basePath = AriaManager.APP.getFilesDir().getPath(); |
||||||
|
return (new File(String.format("%s%s", basePath, DOWNLOAD_CONFIG_FILE))).exists() |
||||||
|
&& (new File(String.format("%s%s", basePath, UPLOAD_CONFIG_FILE))).exists() |
||||||
|
&& (new File(String.format("%s%s", basePath, APP_CONFIG_FILE))).exists() |
||||||
|
&& (new File(String.format("%s%s", basePath, DGROUP_CONFIG_FILE))).exists(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除3.5.2之前版本的配置文件,从3.5.2开始,配置文件的保存不再使用properties文件 |
||||||
|
*/ |
||||||
|
private void del351Config(String basePath) { |
||||||
|
File oldDCfg = new File(String.format("%s/Aria/DownloadConfig.properties", basePath)); |
||||||
|
if (oldDCfg.exists()) { // 只需要判断一个
|
||||||
|
File oldUCfg = new File(String.format("%s/Aria/UploadConfig.properties", basePath)); |
||||||
|
File oldACfg = new File(String.format("%s/Aria/AppConfig.properties", basePath)); |
||||||
|
oldDCfg.delete(); |
||||||
|
oldUCfg.delete(); |
||||||
|
oldACfg.delete(); |
||||||
|
// 删除配置触发更新
|
||||||
|
File temp = new File(String.format("%s%s", basePath, XML_FILE)); |
||||||
|
if (temp.exists()) { |
||||||
|
temp.delete(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,114 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 下载类型的组合任务 |
||||||
|
*/ |
||||||
|
public class DGroupConfig extends BaseTaskConfig implements Serializable { |
||||||
|
|
||||||
|
/** |
||||||
|
* 能同时下载的子任务最大任务数,默认3 |
||||||
|
*/ |
||||||
|
int subMaxTaskNum = 3; |
||||||
|
|
||||||
|
/** |
||||||
|
* 子任务重试次数,默认为5 |
||||||
|
*/ |
||||||
|
int subReTryNum = 5; |
||||||
|
|
||||||
|
/** |
||||||
|
* 子任务下载失败时的重试间隔,单位为毫秒,默认2000毫秒- |
||||||
|
*/ |
||||||
|
int subReTryInterval = 2000; |
||||||
|
|
||||||
|
private DownloadConfig subConfig; |
||||||
|
|
||||||
|
DGroupConfig() { |
||||||
|
getSubConfig(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override int getType() { |
||||||
|
return TYPE_DGROUP; |
||||||
|
} |
||||||
|
|
||||||
|
@Override public DGroupConfig setMaxSpeed(int maxSpeed) { |
||||||
|
super.setMaxSpeed(maxSpeed); |
||||||
|
DownloadGroupTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public DownloadConfig getSubConfig() { |
||||||
|
if (subConfig == null) { |
||||||
|
subConfig = new DownloadConfig(); |
||||||
|
subConfig.threadNum = 1; |
||||||
|
subConfig.useBlock = false; |
||||||
|
subConfig.buffSize = buffSize; |
||||||
|
subConfig.caName = caName; |
||||||
|
subConfig.caPath = caPath; |
||||||
|
subConfig.connectTimeOut = connectTimeOut; |
||||||
|
subConfig.iOTimeOut = iOTimeOut; |
||||||
|
subConfig.isConvertSpeed = isConvertSpeed; |
||||||
|
subConfig.maxSpeed = maxSpeed; |
||||||
|
subConfig.queueMod = "now"; |
||||||
|
subConfig.reTryInterval = subReTryInterval; |
||||||
|
subConfig.reTryNum = subReTryNum; |
||||||
|
subConfig.updateInterval = updateInterval; |
||||||
|
} |
||||||
|
return subConfig; |
||||||
|
} |
||||||
|
|
||||||
|
public DGroupConfig setMaxTaskNum(int maxTaskNum) { |
||||||
|
super.setMaxTaskNum(maxTaskNum); |
||||||
|
DownloadGroupTaskQueue.getInstance().setMaxTaskNum(maxTaskNum); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getSubMaxTaskNum() { |
||||||
|
return subMaxTaskNum; |
||||||
|
} |
||||||
|
|
||||||
|
public DGroupConfig setSubMaxTaskNum(int subMaxTaskNum) { |
||||||
|
this.subMaxTaskNum = subMaxTaskNum; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getSubReTryNum() { |
||||||
|
return subReTryNum; |
||||||
|
} |
||||||
|
|
||||||
|
public DGroupConfig setSubReTryNum(int subReTryNum) { |
||||||
|
this.subReTryNum = subReTryNum; |
||||||
|
subConfig.reTryNum = subReTryNum; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getSubReTryInterval() { |
||||||
|
return subReTryInterval; |
||||||
|
} |
||||||
|
|
||||||
|
public DGroupConfig setSubReTryInterval(int subReTryInterval) { |
||||||
|
this.subReTryInterval = subReTryInterval; |
||||||
|
subConfig.reTryInterval = subReTryInterval; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.core.queue.DownloadTaskQueue; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 下载配置 |
||||||
|
*/ |
||||||
|
public class DownloadConfig extends BaseTaskConfig implements Serializable { |
||||||
|
/** |
||||||
|
* 下载线程数,下载线程数不能小于1 注意: 1、线程下载数改变后,新的下载任务才会生效; 2、如果任务大小小于1m,该设置不会生效; |
||||||
|
* 3、从3.4.1开始,如果线程数为1,文件初始化时将不再预占用对应长度的空间,下载多少byte,则占多大的空间; 对于采用多线程的任务或旧任务,依然采用原来的文件空间占用方式; |
||||||
|
*/ |
||||||
|
int threadNum = 3; |
||||||
|
|
||||||
|
/** |
||||||
|
* 多线程下载是否使用块下载模式,{@code true}使用,{@code false}不使用 注意: 1、使用分块模式,在读写性能底下的手机上,合并文件需要的时间会更加长; |
||||||
|
* 2、优点是使用多线程的块下载,初始化时,文件初始化时将不会预占用对应长度的空间; 3、只对新的多线程下载任务有效 4、只对多线程的任务有效 |
||||||
|
*/ |
||||||
|
boolean useBlock = false; |
||||||
|
|
||||||
|
public boolean isUseBlock() { |
||||||
|
return useBlock; |
||||||
|
} |
||||||
|
|
||||||
|
@Override public DownloadConfig setMaxSpeed(int maxSpeed) { |
||||||
|
super.setMaxSpeed(maxSpeed); |
||||||
|
DownloadTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public DownloadConfig setUseBlock(boolean useBlock) { |
||||||
|
this.useBlock = useBlock; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public DownloadConfig setMaxTaskNum(int maxTaskNum) { |
||||||
|
super.setMaxTaskNum(maxTaskNum); |
||||||
|
DownloadTaskQueue.getInstance().setMaxTaskNum(maxTaskNum); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public DownloadConfig setThreadNum(int threadNum) { |
||||||
|
this.threadNum = threadNum; |
||||||
|
save(); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public int getThreadNum() { |
||||||
|
return threadNum; |
||||||
|
} |
||||||
|
|
||||||
|
DownloadConfig() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override int getType() { |
||||||
|
return TYPE_DOWNLOAD; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package com.arialyy.aria.core.config; |
||||||
|
|
||||||
|
public class TTaskConfigAdapeter { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
/* |
||||||
|
* 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.config; |
||||||
|
|
||||||
|
import com.arialyy.aria.core.queue.UploadTaskQueue; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* 上传配置 |
||||||
|
*/ |
||||||
|
public class UploadConfig extends BaseTaskConfig implements Serializable { |
||||||
|
|
||||||
|
UploadConfig() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override public UploadConfig setMaxSpeed(int maxSpeed) { |
||||||
|
super.setMaxSpeed(maxSpeed); |
||||||
|
UploadTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public UploadConfig setMaxTaskNum(int maxTaskNum) { |
||||||
|
super.setMaxTaskNum(maxTaskNum); |
||||||
|
UploadTaskQueue.getInstance().setMaxTaskNum(maxTaskNum); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
@Override int getType() { |
||||||
|
return TYPE_UPLOAD; |
||||||
|
} |
||||||
|
} |
@ -1,621 +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; |
|
||||||
|
|
||||||
import android.text.TextUtils; |
|
||||||
import com.arialyy.aria.core.common.QueueMod; |
|
||||||
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue; |
|
||||||
import com.arialyy.aria.core.queue.DownloadTaskQueue; |
|
||||||
import com.arialyy.aria.core.queue.UploadTaskQueue; |
|
||||||
import com.arialyy.aria.util.ALog; |
|
||||||
import com.arialyy.aria.util.AriaCrashHandler; |
|
||||||
import com.arialyy.aria.util.CommonUtil; |
|
||||||
import java.io.File; |
|
||||||
import java.io.Serializable; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created by lyy on 2016/12/8. 信息配置 kotlin 方式有bug,不能将public去掉 |
|
||||||
*/ |
|
||||||
public final class Configuration { |
|
||||||
private static final String TAG = "Configuration"; |
|
||||||
private static final String DOWNLOAD_CONFIG_FILE = "/Aria/AriaDownload.cfg"; |
|
||||||
private static final String UPLOAD_CONFIG_FILE = "/Aria/AriaUpload.cfg"; |
|
||||||
private static final String APP_CONFIG_FILE = "/Aria/AriaApp.cfg"; |
|
||||||
private static final String DGROUP_CONFIG_FILE = "/Aria/AriaDGroup.cfg"; |
|
||||||
private static final int TYPE_DOWNLOAD = 1; |
|
||||||
private static final int TYPE_UPLOAD = 2; |
|
||||||
private static final int TYPE_APP = 3; |
|
||||||
private static final int TYPE_DGROUP = 4; |
|
||||||
private static volatile Configuration INSTANCE = null; |
|
||||||
static final String XML_FILE = "/Aria/aria_config.xml"; |
|
||||||
DownloadConfig downloadCfg; |
|
||||||
UploadConfig uploadCfg; |
|
||||||
AppConfig appCfg; |
|
||||||
DGroupConfig dGroupCfg; |
|
||||||
|
|
||||||
private Configuration() { |
|
||||||
//删除老版本的配置文件
|
|
||||||
String basePath = AriaManager.APP.getFilesDir().getPath(); |
|
||||||
File oldDCfg = new File(String.format("%s/Aria/DownloadConfig.properties", basePath)); |
|
||||||
if (oldDCfg.exists()) { // 只需要判断一个
|
|
||||||
File oldUCfg = new File(String.format("%s/Aria/UploadConfig.properties", basePath)); |
|
||||||
File oldACfg = new File(String.format("%s/Aria/AppConfig.properties", basePath)); |
|
||||||
oldDCfg.delete(); |
|
||||||
oldUCfg.delete(); |
|
||||||
oldACfg.delete(); |
|
||||||
// 删除配置触发更新
|
|
||||||
File temp = new File(String.format("%s%s", basePath, XML_FILE)); |
|
||||||
if (temp.exists()) { |
|
||||||
temp.delete(); |
|
||||||
} |
|
||||||
} |
|
||||||
File newDCfg = new File(String.format("%s%s", basePath, DOWNLOAD_CONFIG_FILE)); |
|
||||||
File newUCfg = new File(String.format("%s%s", basePath, UPLOAD_CONFIG_FILE)); |
|
||||||
File newACfg = new File(String.format("%s%s", basePath, APP_CONFIG_FILE)); |
|
||||||
File dgCfg = new File(String.format("%s%s", basePath, DGROUP_CONFIG_FILE)); |
|
||||||
// 加载下载配置
|
|
||||||
if (newDCfg.exists()) { |
|
||||||
downloadCfg = (DownloadConfig) CommonUtil.readObjFromFile(newDCfg.getPath()); |
|
||||||
} |
|
||||||
if (downloadCfg == null) { |
|
||||||
downloadCfg = new DownloadConfig(); |
|
||||||
} |
|
||||||
// 加载上传配置
|
|
||||||
if (newUCfg.exists()) { |
|
||||||
uploadCfg = (UploadConfig) CommonUtil.readObjFromFile(newUCfg.getPath()); |
|
||||||
} |
|
||||||
if (uploadCfg == null) { |
|
||||||
uploadCfg = new UploadConfig(); |
|
||||||
} |
|
||||||
// 加载app配置
|
|
||||||
if (newACfg.exists()) { |
|
||||||
appCfg = (AppConfig) CommonUtil.readObjFromFile(newACfg.getPath()); |
|
||||||
} |
|
||||||
if (appCfg == null) { |
|
||||||
appCfg = new AppConfig(); |
|
||||||
} |
|
||||||
// 加载下载类型组合任务的配置
|
|
||||||
if (dgCfg.exists()) { |
|
||||||
dGroupCfg = (DGroupConfig) CommonUtil.readObjFromFile(dgCfg.getPath()); |
|
||||||
} |
|
||||||
if (dGroupCfg == null) { |
|
||||||
dGroupCfg = new DGroupConfig(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
static Configuration getInstance() { |
|
||||||
if (INSTANCE == null) { |
|
||||||
synchronized (AppConfig.class) { |
|
||||||
INSTANCE = new Configuration(); |
|
||||||
} |
|
||||||
} |
|
||||||
return INSTANCE; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 检查配置文件是否存在,只要{@link DownloadConfig}、{@link UploadConfig}、{@link AppConfig}、{@link |
|
||||||
* DGroupConfig}其中一个不存在 则任务配置文件不存在 |
|
||||||
* |
|
||||||
* @return {@code true}配置存在,{@code false}配置不存在 |
|
||||||
*/ |
|
||||||
boolean configExists() { |
|
||||||
String basePath = AriaManager.APP.getFilesDir().getPath(); |
|
||||||
return (new File(String.format("%s%s", basePath, DOWNLOAD_CONFIG_FILE))).exists() |
|
||||||
&& (new File(String.format("%s%s", basePath, UPLOAD_CONFIG_FILE))).exists() |
|
||||||
&& (new File(String.format("%s%s", basePath, APP_CONFIG_FILE))).exists() |
|
||||||
&& (new File(String.format("%s%s", basePath, DGROUP_CONFIG_FILE))).exists(); |
|
||||||
} |
|
||||||
|
|
||||||
abstract static class BaseConfig implements Serializable { |
|
||||||
|
|
||||||
/** |
|
||||||
* 类型 |
|
||||||
* |
|
||||||
* @return {@link #TYPE_DOWNLOAD}、{@link #TYPE_UPLOAD}、{@link #TYPE_APP}、{@link #TYPE_DGROUP} |
|
||||||
*/ |
|
||||||
abstract int getType(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 保存配置 |
|
||||||
*/ |
|
||||||
void save() { |
|
||||||
String basePath = AriaManager.APP.getFilesDir().getPath(); |
|
||||||
String path = null; |
|
||||||
switch (getType()) { |
|
||||||
case TYPE_DOWNLOAD: |
|
||||||
path = DOWNLOAD_CONFIG_FILE; |
|
||||||
break; |
|
||||||
case TYPE_UPLOAD: |
|
||||||
path = UPLOAD_CONFIG_FILE; |
|
||||||
break; |
|
||||||
case TYPE_APP: |
|
||||||
path = APP_CONFIG_FILE; |
|
||||||
break; |
|
||||||
} |
|
||||||
if (!TextUtils.isEmpty(path)) { |
|
||||||
String tempPath = String.format("%s%s", basePath, path); |
|
||||||
CommonUtil.deleteFile(tempPath); |
|
||||||
CommonUtil.writeObjToFile(tempPath, this); |
|
||||||
} else { |
|
||||||
ALog.e(TAG, String.format("保存配置失败,配置类型:%s,原因:路径错误", getType())); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 通用任务配置 |
|
||||||
*/ |
|
||||||
abstract static class BaseTaskConfig extends BaseConfig implements Serializable { |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢 |
|
||||||
*/ |
|
||||||
int buffSize = 8192; |
|
||||||
|
|
||||||
/** |
|
||||||
* 进度刷新间隔,默认1秒 |
|
||||||
*/ |
|
||||||
long updateInterval = 1000; |
|
||||||
|
|
||||||
/** |
|
||||||
* 旧任务数 |
|
||||||
*/ |
|
||||||
public int oldMaxTaskNum = 2; |
|
||||||
|
|
||||||
/** |
|
||||||
* 任务队列最大任务数, 默认为2 |
|
||||||
*/ |
|
||||||
int maxTaskNum = 2; |
|
||||||
/** |
|
||||||
* 下载失败,重试次数,默认为10 |
|
||||||
*/ |
|
||||||
int reTryNum = 10; |
|
||||||
/** |
|
||||||
* 设置重试间隔,单位为毫秒,默认2000毫秒 |
|
||||||
*/ |
|
||||||
int reTryInterval = 2000; |
|
||||||
/** |
|
||||||
* 设置url连接超时时间,单位为毫秒,默认5000毫秒 |
|
||||||
*/ |
|
||||||
int connectTimeOut = 5000; |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否需要转换速度单位,转换完成后为:1b/s、1k/s、1m/s、1g/s、1t/s,如果不需要将返回byte长度 |
|
||||||
*/ |
|
||||||
boolean isConvertSpeed = false; |
|
||||||
|
|
||||||
/** |
|
||||||
* 执行队列类型 |
|
||||||
* |
|
||||||
* @see QueueMod |
|
||||||
*/ |
|
||||||
String queueMod = "wait"; |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒 |
|
||||||
*/ |
|
||||||
int iOTimeOut = 20 * 1000; |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置最大下载/上传速度,单位:kb, 为0表示不限速 |
|
||||||
*/ |
|
||||||
int maxSpeed = 0; |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置https ca 证书信息;path 为assets目录下的CA证书完整路径 |
|
||||||
*/ |
|
||||||
String caPath; |
|
||||||
/** |
|
||||||
* name 为CA证书名 |
|
||||||
*/ |
|
||||||
String caName; |
|
||||||
|
|
||||||
public String getCaPath() { |
|
||||||
return caPath; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseConfig setCaPath(String caPath) { |
|
||||||
this.caPath = caPath; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public String getCaName() { |
|
||||||
return caName; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseConfig setCaName(String caName) { |
|
||||||
this.caName = caName; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setMaxTaskNum(int maxTaskNum) { |
|
||||||
oldMaxTaskNum = this.maxTaskNum; |
|
||||||
this.maxTaskNum = maxTaskNum; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getMaxSpeed() { |
|
||||||
return maxSpeed; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setMaxSpeed(int maxSpeed) { |
|
||||||
this.maxSpeed = maxSpeed; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public long getUpdateInterval() { |
|
||||||
return updateInterval; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置进度更新间隔,该设置对正在运行的任务无效,默认为1000毫秒 |
|
||||||
* |
|
||||||
* @param updateInterval 不能小于0 |
|
||||||
*/ |
|
||||||
public BaseTaskConfig setUpdateInterval(long updateInterval) { |
|
||||||
if (updateInterval <= 0) { |
|
||||||
ALog.w("Configuration", "进度更新间隔不能小于0"); |
|
||||||
return this; |
|
||||||
} |
|
||||||
this.updateInterval = updateInterval; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public String getQueueMod() { |
|
||||||
return queueMod; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setQueueMod(String queueMod) { |
|
||||||
this.queueMod = queueMod; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getMaxTaskNum() { |
|
||||||
return maxTaskNum; |
|
||||||
} |
|
||||||
|
|
||||||
public int getReTryNum() { |
|
||||||
return reTryNum; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setReTryNum(int reTryNum) { |
|
||||||
this.reTryNum = reTryNum; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getReTryInterval() { |
|
||||||
return reTryInterval; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setReTryInterval(int reTryInterval) { |
|
||||||
this.reTryInterval = reTryInterval; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isConvertSpeed() { |
|
||||||
return isConvertSpeed; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setConvertSpeed(boolean convertSpeed) { |
|
||||||
isConvertSpeed = convertSpeed; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getConnectTimeOut() { |
|
||||||
return connectTimeOut; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setConnectTimeOut(int connectTimeOut) { |
|
||||||
this.connectTimeOut = connectTimeOut; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getIOTimeOut() { |
|
||||||
return iOTimeOut; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setIOTimeOut(int iOTimeOut) { |
|
||||||
this.iOTimeOut = iOTimeOut; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getBuffSize() { |
|
||||||
return buffSize; |
|
||||||
} |
|
||||||
|
|
||||||
public BaseTaskConfig setBuffSize(int buffSize) { |
|
||||||
this.buffSize = buffSize; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 下载配置 |
|
||||||
*/ |
|
||||||
public static class DownloadConfig extends BaseTaskConfig implements Serializable { |
|
||||||
/** |
|
||||||
* 下载线程数,下载线程数不能小于1 注意: 1、线程下载数改变后,新的下载任务才会生效; 2、如果任务大小小于1m,该设置不会生效; |
|
||||||
* 3、从3.4.1开始,如果线程数为1,文件初始化时将不再预占用对应长度的空间,下载多少byte,则占多大的空间; 对于采用多线程的任务或旧任务,依然采用原来的文件空间占用方式; |
|
||||||
*/ |
|
||||||
int threadNum = 3; |
|
||||||
|
|
||||||
/** |
|
||||||
* 多线程下载是否使用块下载模式,{@code true}使用,{@code false}不使用 注意: 1、使用分块模式,在读写性能底下的手机上,合并文件需要的时间会更加长; |
|
||||||
* 2、优点是使用多线程的块下载,初始化时,文件初始化时将不会预占用对应长度的空间; 3、只对新的多线程下载任务有效 4、只对多线程的任务有效 |
|
||||||
*/ |
|
||||||
boolean useBlock = false; |
|
||||||
|
|
||||||
public boolean isUseBlock() { |
|
||||||
return useBlock; |
|
||||||
} |
|
||||||
|
|
||||||
@Override public DownloadConfig setMaxSpeed(int maxSpeed) { |
|
||||||
super.setMaxSpeed(maxSpeed); |
|
||||||
DownloadTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public DownloadConfig setUseBlock(boolean useBlock) { |
|
||||||
this.useBlock = useBlock; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public DownloadConfig setMaxTaskNum(int maxTaskNum) { |
|
||||||
super.setMaxTaskNum(maxTaskNum); |
|
||||||
DownloadTaskQueue.getInstance().setMaxTaskNum(maxTaskNum); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public DownloadConfig setThreadNum(int threadNum) { |
|
||||||
this.threadNum = threadNum; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getThreadNum() { |
|
||||||
return threadNum; |
|
||||||
} |
|
||||||
|
|
||||||
private DownloadConfig() { |
|
||||||
} |
|
||||||
|
|
||||||
@Override int getType() { |
|
||||||
return TYPE_DOWNLOAD; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 上传配置 |
|
||||||
*/ |
|
||||||
public static class UploadConfig extends BaseTaskConfig implements Serializable { |
|
||||||
private static UploadConfig INSTANCE = null; |
|
||||||
|
|
||||||
private UploadConfig() { |
|
||||||
//loadConfig();
|
|
||||||
} |
|
||||||
|
|
||||||
@Override public UploadConfig setMaxSpeed(int maxSpeed) { |
|
||||||
super.setMaxSpeed(maxSpeed); |
|
||||||
UploadTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public UploadConfig setMaxTaskNum(int maxTaskNum) { |
|
||||||
super.setMaxTaskNum(maxTaskNum); |
|
||||||
UploadTaskQueue.getInstance().setMaxTaskNum(maxTaskNum); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
static UploadConfig getInstance() { |
|
||||||
if (INSTANCE == null) { |
|
||||||
synchronized (UploadConfig.class) { |
|
||||||
INSTANCE = new UploadConfig(); |
|
||||||
} |
|
||||||
} |
|
||||||
return INSTANCE; |
|
||||||
} |
|
||||||
|
|
||||||
@Override int getType() { |
|
||||||
return TYPE_UPLOAD; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 下载类型的组合任务 |
|
||||||
*/ |
|
||||||
public static class DGroupConfig extends BaseTaskConfig implements Serializable { |
|
||||||
|
|
||||||
private static DGroupConfig INSTANCE = null; |
|
||||||
|
|
||||||
/** |
|
||||||
* 能同时下载的子任务最大任务数,默认3 |
|
||||||
*/ |
|
||||||
int subMaxTaskNum = 3; |
|
||||||
|
|
||||||
/** |
|
||||||
* 子任务重试次数,默认为5 |
|
||||||
*/ |
|
||||||
int subReTryNum = 5; |
|
||||||
|
|
||||||
/** |
|
||||||
* 子任务下载失败时的重试间隔,单位为毫秒,默认2000毫秒- |
|
||||||
*/ |
|
||||||
int subReTryInterval = 2000; |
|
||||||
|
|
||||||
private DGroupConfig() { |
|
||||||
} |
|
||||||
|
|
||||||
static DGroupConfig getInstance() { |
|
||||||
if (INSTANCE == null) { |
|
||||||
synchronized (DGroupConfig.class) { |
|
||||||
INSTANCE = new DGroupConfig(); |
|
||||||
} |
|
||||||
} |
|
||||||
return INSTANCE; |
|
||||||
} |
|
||||||
|
|
||||||
@Override int getType() { |
|
||||||
return TYPE_DGROUP; |
|
||||||
} |
|
||||||
|
|
||||||
@Override public DGroupConfig setMaxSpeed(int maxSpeed) { |
|
||||||
super.setMaxSpeed(maxSpeed); |
|
||||||
DownloadGroupTaskQueue.getInstance().setMaxSpeed(maxSpeed); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public DGroupConfig setMaxTaskNum(int maxTaskNum) { |
|
||||||
super.setMaxTaskNum(maxTaskNum); |
|
||||||
DownloadGroupTaskQueue.getInstance().setMaxTaskNum(maxSpeed); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getSubMaxTaskNum() { |
|
||||||
return subMaxTaskNum; |
|
||||||
} |
|
||||||
|
|
||||||
public DGroupConfig setSubMaxTaskNum(int subMaxTaskNum) { |
|
||||||
this.subMaxTaskNum = subMaxTaskNum; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getSubReTryNum() { |
|
||||||
return subReTryNum; |
|
||||||
} |
|
||||||
|
|
||||||
public DGroupConfig setSubReTryNum(int subReTryNum) { |
|
||||||
this.subReTryNum = subReTryNum; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getSubReTryInterval() { |
|
||||||
return subReTryInterval; |
|
||||||
} |
|
||||||
|
|
||||||
public DGroupConfig setSubReTryInterval(int subReTryInterval) { |
|
||||||
this.subReTryInterval = subReTryInterval; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 应用配置 |
|
||||||
*/ |
|
||||||
public static class AppConfig extends BaseConfig implements Serializable { |
|
||||||
/** |
|
||||||
* 是否使用{@link AriaCrashHandler}来捕获异常 {@code true} 使用;{@code false} 不使用 |
|
||||||
*/ |
|
||||||
boolean useAriaCrashHandler; |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置Aria的日志级别 |
|
||||||
* |
|
||||||
* {@link ALog#LOG_LEVEL_VERBOSE} |
|
||||||
*/ |
|
||||||
int logLevel; |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否检查网络,{@code true}检查网络 |
|
||||||
*/ |
|
||||||
boolean netCheck = true; |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否使用广播 除非无法使用注解,否则不建议使用广播来接受任务 {@code true} 使用广播,{@code false} 不适用广播 |
|
||||||
*/ |
|
||||||
boolean useBroadcast = false; |
|
||||||
|
|
||||||
/** |
|
||||||
* 断网的时候是否重试,{@code true}断网也重试;{@code false}断网不重试,直接走失败的回调 |
|
||||||
*/ |
|
||||||
boolean notNetRetry = false; |
|
||||||
|
|
||||||
public boolean isNotNetRetry() { |
|
||||||
return notNetRetry; |
|
||||||
} |
|
||||||
|
|
||||||
public AppConfig setNotNetRetry(boolean notNetRetry) { |
|
||||||
this.notNetRetry = notNetRetry; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isUseBroadcast() { |
|
||||||
return useBroadcast; |
|
||||||
} |
|
||||||
|
|
||||||
public AppConfig setUseBroadcast(boolean useBroadcast) { |
|
||||||
this.useBroadcast = useBroadcast; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isNetCheck() { |
|
||||||
return netCheck; |
|
||||||
} |
|
||||||
|
|
||||||
public AppConfig setNetCheck(boolean netCheck) { |
|
||||||
this.netCheck = netCheck; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public AppConfig setLogLevel(int level) { |
|
||||||
this.logLevel = level; |
|
||||||
ALog.LOG_LEVEL = level; |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
public int getLogLevel() { |
|
||||||
return logLevel; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean getUseAriaCrashHandler() { |
|
||||||
return useAriaCrashHandler; |
|
||||||
} |
|
||||||
|
|
||||||
public AppConfig setUseAriaCrashHandler(boolean useAriaCrashHandler) { |
|
||||||
this.useAriaCrashHandler = useAriaCrashHandler; |
|
||||||
if (useAriaCrashHandler) { |
|
||||||
Thread.setDefaultUncaughtExceptionHandler(new AriaCrashHandler()); |
|
||||||
} else { |
|
||||||
Thread.setDefaultUncaughtExceptionHandler(null); |
|
||||||
} |
|
||||||
save(); |
|
||||||
return this; |
|
||||||
} |
|
||||||
|
|
||||||
@Override int getType() { |
|
||||||
return TYPE_APP; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue