diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ca2bfd0..9219c15a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ #Changelog +## 8.5.2(2022-11-24) +* 支持 multi 区域 +* 优化 Server 配置拉去逻辑 + ## 8.5.1(2022-10-21) * 移除雾存储区域:华东一区 * 新增首尔和华东浙江 2 区 Region diff --git a/README.md b/README.md index e70070d5..e4d61a80 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android | Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 | |------------ |-----------------|------------------------| +| 8.5.2 | Android 4.0+ | okhttp 4+ | | 8.5.1 | Android 4.0+ | okhttp 4+ | | 8.5.0 | Android 4.0+ | okhttp 4+ | | 8.4.* | Android 4.0+ | okhttp 4+ | @@ -35,7 +36,7 @@ https://github.com/qiniudemo/qiniu-lab-android | 7.0.7 | Android 2.2+ | android-async-http 1.4.8 | ### 注意 -* 推荐使用最新版:8.5.1 +* 推荐使用最新版:8.5.2 * 7.6.2 ~ 8.3.2 AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效) ``` diff --git a/library/build.gradle b/library/build.gradle index bf1f0720..74af114b 100755 --- a/library/build.gradle +++ b/library/build.gradle @@ -61,7 +61,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.1' // implementation 'com.squareup.okhttp3:okhttp:3.12.+' - implementation 'com.qiniu:happy-dns:2.0.0' + implementation 'com.qiniu:happy-dns:2.0.1' // for javax.annotation.Nullable use in custom MultipartBody and Headers implements. // implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.conscrypt:conscrypt-android:2.2.1' diff --git a/library/src/androidTest/java/com/qiniu/android/TestConfig.java b/library/src/androidTest/java/com/qiniu/android/TestConfig.java index 9ab66283..7f566a84 100644 --- a/library/src/androidTest/java/com/qiniu/android/TestConfig.java +++ b/library/src/androidTest/java/com/qiniu/android/TestConfig.java @@ -10,27 +10,26 @@ public final class TestConfig { // TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains // 华东上传凭证 public static final String bucket_z0 = "kodo-phone-zone0-space"; - - public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Qxeb7v5PXIrih_gwR-6pD1KsGgg=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:gk-emjEYF779GyuD2PLjrJGNeWw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华北上传凭证 public static final String bucket_z1 = "kodo-phone-zone1-space"; - public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:crF2Xi7Zxcs6y9OIwmbZ_9QdAtA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Vo4gv4uabU3RKpH0R-PxhU6tj6c=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华南上传凭证 public static final String bucket_z2 = "kodo-phone-zone2-space"; - public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:leoDnGLMa0wfqQ4GGb3yqWjLw5Y=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:juVQn2wvtbrFEy-J2Etq-JqO6UE=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 北美上传凭证 public static final String bucket_na0 = "kodo-phone-zone-na0-space"; - public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:4WqbwsnKFgWO6vZMr8V6tVMNZ50=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDQxd9wAWd7_jV8UMR9dxnVtAac=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 东南亚上传凭证 public static final String bucket_as0 = "kodo-phone-zone-as0-space"; - public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:YjOnS0SLd0P1Z5VG_3Oxfls0KeA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Aj9HN9lRqpQzyX3EVno7BjMBkv8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华北浙江2上传凭证 public static final String bucket_cn_east_2 = "kodo-phone-cn-east-2"; - public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ogrnSltO4Vdsrcsk4XNCR9t63tQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2Njk1MzQ5NzgsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ=="; + public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDr1-LvnJ53Are_ZhhDVF4HwOPY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2NzQ4MDExNTUsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ=="; // 韩国亚太上传凭证 public static final String bucket_ap_northeast_1 = "kodo-phone-ap-northeast-1"; - public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:yI8KG27WvY9QSLv669-yv9Ac1mY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; - public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:KVBTuAcbmqx0ji81VQRwPzLgUEY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjY5NTM0OTc4LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0="; + public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:StRMMkmKvNZMCo6zTrUjaLO529E=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:mJ6Z0JLK5op1_d0FdU0JrjIHKog=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjc0ODAxMTU1LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0="; // ----------- public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW"; diff --git a/library/src/main/java/com/qiniu/android/collect/ReportItem.java b/library/src/main/java/com/qiniu/android/collect/ReportItem.java index 3517354e..97a2ba37 100644 --- a/library/src/main/java/com/qiniu/android/collect/ReportItem.java +++ b/library/src/main/java/com/qiniu/android/collect/ReportItem.java @@ -16,6 +16,9 @@ public void setReport(Object value, String key){ if (key == null || value == null){ return; } + if (value instanceof String && ((String) value).length() > 1024) { + value = ((String) value).substring(0, 1024); + } keyValues.put(key, value); } diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index 10dd6bc9..f40c06fc 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -10,6 +10,7 @@ import org.json.JSONObject; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -23,6 +24,7 @@ public final class AutoZone extends Zone { */ private String[] ucServers; private ArrayList transactions = new ArrayList<>(); + private FixedZone defaultZone; private static final SingleFlight SingleFlight = new SingleFlight(); @@ -39,17 +41,17 @@ public void setUcServers(String[] ucServers) { } } + public void setDefaultZones(FixedZone[] zones) { + defaultZone = FixedZone.combineZones(zones); + } + public List getUcServerList() { if (ucServers != null && ucServers.length > 0) { ArrayList serverList = new ArrayList<>(); Collections.addAll(serverList, ucServers); return serverList; } else { - ArrayList serverList = new ArrayList<>(); - serverList.add(Config.preQueryHost02); - serverList.add(Config.preQueryHost00); - serverList.add(Config.preQueryHost01); - return serverList; + return Arrays.asList(Config.preQueryHosts()); } } @@ -61,7 +63,7 @@ private String[] getUcServerArray() { if (ucServers != null && ucServers.length > 0) { return ucServers; } else { - return new String[]{Config.preQueryHost00, Config.preQueryHost01}; + return Config.preQueryHosts(); } } @@ -70,7 +72,8 @@ public ZonesInfo getZonesInfo(UpToken token) { if (token == null) { return null; } - ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(token.index()); + final String cacheKey = token.index(); + ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey); if (zonesInfo != null) { try { zonesInfo = (ZonesInfo) zonesInfo.clone(); @@ -137,12 +140,20 @@ public void complete(Object value) { completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics); } } else { - if (responseInfo.isNetworkBroken()) { + if (responseInfo != null && responseInfo.isNetworkBroken()) { completeHandler.complete(ResponseInfo.NetworkError, responseInfo, requestMetrics); } else { - ZonesInfo zonesInfoP = FixedZone.localsZoneInfo().getZonesInfo(token); - if (zonesInfoP.isValid()) { - GlobalCache.getInstance().cache(zonesInfoP, cacheKey); + ZonesInfo info = null; + if (defaultZone != null) { + ZonesInfo infoP = defaultZone.getZonesInfo(token); + if (infoP != null && infoP.isValid()) { + infoP.toTemporary(); + info = infoP; + } + } + + if (info != null) { + GlobalCache.getInstance().cache(info, cacheKey); completeHandler.complete(0, responseInfo, requestMetrics); } else { completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics); diff --git a/library/src/main/java/com/qiniu/android/common/Config.java b/library/src/main/java/com/qiniu/android/common/Config.java index d792f420..ced13da2 100644 --- a/library/src/main/java/com/qiniu/android/common/Config.java +++ b/library/src/main/java/com/qiniu/android/common/Config.java @@ -72,6 +72,10 @@ public final class Config { public static String preQueryHost01 = "api.qiniu.com"; public static String preQueryHost02 = "kodo-config.qiniuapi.com"; + public static String[] preQueryHosts() { + return new String[]{preQueryHost00, preQueryHost02, preQueryHost01}; + } + /** * 当网络切换到 wifi 下,切换到此设置 */ diff --git a/library/src/main/java/com/qiniu/android/common/Constants.java b/library/src/main/java/com/qiniu/android/common/Constants.java index 5fe44c28..c619d00a 100644 --- a/library/src/main/java/com/qiniu/android/common/Constants.java +++ b/library/src/main/java/com/qiniu/android/common/Constants.java @@ -2,7 +2,7 @@ public final class Constants { - public static final String VERSION = "8.5.1"; + public static final String VERSION = "8.5.2"; public static final String UTF_8 = "utf-8"; } diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java index d4d0caab..b5bf09d2 100644 --- a/library/src/main/java/com/qiniu/android/common/FixedZone.java +++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java @@ -64,18 +64,28 @@ public final class FixedZone extends Zone { private ZonesInfo zonesInfo; public static FixedZone localsZoneInfo() { - ArrayList localsZone = new ArrayList<>(); - localsZone.add((FixedZone)zone0); - localsZone.add((FixedZone)zoneCnEast2); - localsZone.add((FixedZone)zone1); - localsZone.add((FixedZone)zone2); - localsZone.add((FixedZone)zoneNa0); - localsZone.add((FixedZone)zoneApNorthEast1); - localsZone.add((FixedZone)zoneAs0); + FixedZone[] localsZone = new FixedZone[]{ + (FixedZone) zone0, (FixedZone) zoneCnEast2, + (FixedZone) zone1, (FixedZone) zone2, + (FixedZone) zoneNa0, (FixedZone) zoneApNorthEast1, + (FixedZone) zoneAs0, + }; + + FixedZone zone = combineZones(localsZone); + if (zone != null) { + zone.zonesInfo.toTemporary(); + } + return zone; + } + + public static FixedZone combineZones(FixedZone[] zones) { + if (zones == null || zones.length == 0) { + return null; + } ArrayList zoneInfoArray = new ArrayList<>(); - for (FixedZone zone : localsZone){ - if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null){ + for (FixedZone zone : zones) { + if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null) { zoneInfoArray.addAll(zone.zonesInfo.zonesInfo); } } @@ -90,7 +100,7 @@ public FixedZone(ZoneInfo zoneInfo) { this.zonesInfo = new ZonesInfo(zoneInfoList); } - public FixedZone(ZonesInfo zonesInfo){ + public FixedZone(ZonesInfo zonesInfo) { this.zonesInfo = zonesInfo; } @@ -116,7 +126,7 @@ private ZonesInfo createZonesInfo(String[] upDomains, List upDomainsList = new ArrayList(Arrays.asList(upDomains)); List oldUpDomainsList = null; - if (oldUpDomains != null && oldUpDomains.length > 0){ + if (oldUpDomains != null && oldUpDomains.length > 0) { oldUpDomainsList = new ArrayList(Arrays.asList(oldUpDomains)); } else { oldUpDomainsList = new ArrayList<>(); @@ -139,7 +149,7 @@ public ZonesInfo getZonesInfo(UpToken token) { @Override public void preQuery(UpToken token, QueryHandler completeHandler) { - if (completeHandler != null){ + if (completeHandler != null) { completeHandler.complete(0, null, null); } } diff --git a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java index 4fb890d5..53bed240 100644 --- a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java +++ b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java @@ -4,6 +4,7 @@ import org.json.JSONObject; import java.util.ArrayList; +import java.util.Arrays; public class ZonesInfo implements Cloneable { @@ -23,8 +24,8 @@ public ZonesInfo(ArrayList zonesInfo, boolean isTemporary) { public static ZonesInfo createZonesInfo(JSONObject jsonObject) { ArrayList zonesInfo = new ArrayList<>(); - try { - if (jsonObject != null) { + if (jsonObject != null) { + try { JSONArray hosts = jsonObject.getJSONArray("hosts"); for (int i = 0; i < hosts.length(); i++) { ZoneInfo zoneInfo = ZoneInfo.buildFromJson(hosts.getJSONObject(i)); @@ -32,15 +33,27 @@ public static ZonesInfo createZonesInfo(JSONObject jsonObject) { zonesInfo.add(zoneInfo); } } + + } catch (Exception ignored) { } - } catch (Exception ignored) { } return new ZonesInfo(zonesInfo); } public boolean isValid() { - return zonesInfo != null && zonesInfo.size() > 0 && zonesInfo.get(0).isValid(); + if (zonesInfo == null || zonesInfo.size() == 0) { + return false; + } + + boolean valid = true; + for (ZoneInfo info : zonesInfo) { + if (!info.isValid()) { + valid = false; + break; + } + } + return valid; } // 是否为临时 zone, 临时 zone,不建议长期使用 @@ -57,7 +70,7 @@ protected Object clone() throws CloneNotSupportedException { ArrayList infos = new ArrayList<>(); if (zonesInfo != null && zonesInfo.size() > 0) { for (ZoneInfo zoneInfo : zonesInfo) { - infos.add((ZoneInfo)zoneInfo.clone()); + infos.add((ZoneInfo) zoneInfo.clone()); } } ZonesInfo info = new ZonesInfo(infos); diff --git a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java index 5ab5c7df..433b2db7 100644 --- a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java +++ b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java @@ -1,7 +1,6 @@ package com.qiniu.android.http.dns; import com.qiniu.android.common.Config; -import com.qiniu.android.common.FixedZone; import com.qiniu.android.common.Zone; import com.qiniu.android.common.ZoneInfo; import com.qiniu.android.common.ZonesInfo; diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java index 631e4e73..e926b35b 100644 --- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java +++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java @@ -6,6 +6,7 @@ import com.qiniu.android.transaction.TransactionManager; import java.util.List; +import java.util.Random; public class ServerConfigMonitor { private static final String TransactionKey = "ServerConfig"; @@ -42,7 +43,9 @@ public synchronized static void startMonitor() { return; } - TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, 10, new Runnable() { + Random random = new Random(); + int interval = 120 + random.nextInt(240); + TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, interval, new Runnable() { @Override public void run() { configMonitor.monitor(); diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java index 19911a1f..e8eb52e4 100644 --- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java +++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java @@ -51,6 +51,7 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque } private static synchronized RequestTransaction createServerConfigTransaction() { + // 只上传传才会有 Token,当有上传时才做请求,避免不必要的请求 if (serverConfigTransaction != null) { return null; } @@ -60,12 +61,11 @@ private static synchronized RequestTransaction createServerConfigTransaction() { token = UpToken.getInvalidToken(); } - List servers = new ArrayList<>(); + List servers = null; if (Hosts != null && Hosts.length > 0) { - servers.addAll(Arrays.asList(Hosts)); + servers = Arrays.asList(Hosts); } else { - servers.add(Config.preQueryHost00); - servers.add(Config.preQueryHost01); + servers = Arrays.asList(Config.preQueryHosts()); } serverConfigTransaction = new RequestTransaction(servers, token); return serverConfigTransaction; @@ -110,12 +110,11 @@ private static synchronized RequestTransaction createServerUserConfigTransaction return null; } - List servers = new ArrayList<>(); + List servers = null; if (Hosts != null && Hosts.length > 0) { - servers.addAll(Arrays.asList(Hosts)); + servers = Arrays.asList(Hosts); } else { - servers.add(Config.preQueryHost00); - servers.add(Config.preQueryHost01); + servers = Arrays.asList(Config.preQueryHosts()); } serverUserConfigTransaction = new RequestTransaction(servers, token); return serverUserConfigTransaction; @@ -125,9 +124,9 @@ private static synchronized void destroyServerUserConfigTransaction() { serverUserConfigTransaction = null; } - interface ServerConfigHandler { + interface ServerConfigHandler { void handle(ServerConfig config); - } + } interface ServerUserConfigHandler { void handle(ServerUserConfig config);