From: snickersun Date: Thu, 5 Mar 2020 11:34:22 +0000 (+0800) Subject: 客户测试过程中,发现Deliver.java 中调用OfferQueue 超过50会调用写入文件的函数,造成app crash。 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.js?a=commitdiff_plain;h=8f225dad2a147e28c9dfc71158e7ea4834343dad;p=icsupport.git 客户测试过程中,发现Deliver.java 中调用OfferQueue 超过50会调用写入文件的函数,造成app crash。 去掉写入文件部分,并且对queue满做判断,写不下的会被丢弃,但是会保留日志。 编译最新版本:V370 --- diff --git a/app/app.iml b/app/app.iml index 438d0136..8fae7f39 100644 --- a/app/app.iml +++ b/app/app.iml @@ -125,5 +125,6 @@ + \ No newline at end of file diff --git a/app/release/ICSer_V369_2003051322_release.apk b/app/release/ICSer_V369_2003051322_release.apk deleted file mode 100644 index c9270f0d..00000000 Binary files a/app/release/ICSer_V369_2003051322_release.apk and /dev/null differ diff --git a/app/release/ICSer_V370_2003051933_release.apk b/app/release/ICSer_V370_2003051933_release.apk new file mode 100644 index 00000000..a6c2512e Binary files /dev/null and b/app/release/ICSer_V370_2003051933_release.apk differ diff --git a/app/src/main/java/com/enqualcomm/support/LocationClient.java b/app/src/main/java/com/enqualcomm/support/LocationClient.java index e421a942..fe6d375a 100644 --- a/app/src/main/java/com/enqualcomm/support/LocationClient.java +++ b/app/src/main/java/com/enqualcomm/support/LocationClient.java @@ -535,11 +535,11 @@ public void updateCellInfo() { (runtime.getContextProxy()).context.unregisterReceiver(this.screenOnReceiver); mLbsHelper.unRegisterBroadReceiver(); - this.executor.execute(new Runnable() { - public void run() { - Deliver.saveQueue(); - } - }); +// this.executor.execute(new Runnable() { +// public void run() { +// Deliver.saveQueue(); +// } +// }); stopGpsLocate(); } diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index c7f0db54..c1343aa7 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -158,16 +158,23 @@ public class Deliver extends AbstractConnectionService { private static boolean checkNetwork(){ boolean ret=true; - int signal=mRuntime.getSignalStrength(); - int networkType=SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType(); - if (signal + 110 < getMinSignalStrength(networkType)) { - ICLogger.i("Skip Send for SignalStrengh "+(signal + 110 )+" < "+getMinSignalStrength(networkType)); - //如果信号不好,把msg放回去 - ret=false; - } else { + boolean dateConnectionLinked=SimSignalUtil.checkNet(mRuntime.getContextProxy().context); + + if (dateConnectionLinked) { +// int signal = mRuntime.getSignalStrength(); +// int networkType = SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType(); +// if (signal + 110 < getMinSignalStrength(networkType)) { +// ICLogger.i("Skip Send for SignalStrengh " + (signal + 110) + " < " + getMinSignalStrength(networkType)); +// //如果信号不好,把msg放回去 +// ret = false; +// } if (connection.isServerConnected() == false || !mRuntime.isServerProtocolConnected()) { - ret=false; + ICLogger.i("服务器无法访问,或者协议状态失常"); + ret = false; } + }else{ + ICLogger.i("数据网络没有连接"); + ret=false; } return ret; } @@ -202,7 +209,11 @@ public class Deliver extends AbstractConnectionService { ret=true; } else { //已经拿到的缓存,如果刚巧没有网络,就原路放回去 - ServiceUtil.offerQueue(stringMessage,true); + ICLogger.i("网络不通,不能发送!"); + if (!ServiceUtil.offerQueue(stringMessage,true)){ + ICLogger.i("MessageQueue 已满,数据将被丢弃!"+ stringMessage); + if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "APILog", " queueFullskip! " + stringMessage); + } ret=false; } }else{ @@ -214,7 +225,7 @@ public class Deliver extends AbstractConnectionService { str = "no message!\n"; } ICLogger.i("send cached cmd : \n"+str); - ICLogger.i("\n"+queue.size()+" left in Queue!"); + ICLogger.i("\n"+queue.size()+" in Queue!"); }finally { if(mLock!=null && mLock.isLocked()) mLock.unlock(); @@ -222,59 +233,64 @@ public class Deliver extends AbstractConnectionService { } return ret; } - private static void loadMessage2Queue() { - byte b = 0; - //一次只处理5条数据 - while (b < 5) { - String str = fileCache.load(); - if (str != null) { - byte b1 = ++b; - - try { - StringMessage stringMessage = new StringMessage(str); - //如果在queue中添加失败,则写回cache中 - if (!queue.offerLast(stringMessage)) { - fileCache.put(str); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - public static void saveQueue() { - lock.lock(); - try { - String str; - if (!queue.isEmpty()) { - StringBuilder stringBuilder = new StringBuilder(); - StringMessage stringMessage = queue.poll(); - while (stringMessage != null) { - String cmd=stringMessage.isFromCache(); - stringBuilder.append(cmd); - stringBuilder.append("\n"); - fileCache.put(cmd); - stringMessage = queue.poll(); - } - str = stringBuilder.toString(); - } else { - str = null; - } - ICLogger.i("save queue to cache : \n"+str); - lock.unlock(); - return; - } finally { - if (lock!=null &&lock.isLocked()) - lock.unlock(); - } - } +// private static void loadMessage2Queue() { +// byte b = 0; +// //一次只处理5条数据 +// while (b < 5) { +// String str = fileCache.load(); +// if (str != null) { +// byte b1 = ++b; +// +// try { +// StringMessage stringMessage = new StringMessage(str); +// //如果在queue中添加失败,则写回cache中 +// if (!queue.offerLast(stringMessage)) { +//// fileCache.put(str); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// } +// } +// public static void saveQueue() { +// lock.lock(); +// try { +// String str; +// if (!queue.isEmpty()) { +// StringBuilder stringBuilder = new StringBuilder(); +// StringMessage stringMessage = queue.poll(); +// while (stringMessage != null) { +// String cmd=stringMessage.isFromCache(); +// stringBuilder.append(cmd); +// stringBuilder.append("\n"); +//// fileCache.put(cmd); +// stringMessage = queue.poll(); +// } +// str = stringBuilder.toString(); +// } else { +// str = null; +// } +// ICLogger.i("save queue to cache : \n"+str); +// lock.unlock(); +// return; +// } finally { +// if (lock!=null &&lock.isLocked()) +// lock.unlock(); +// } +// } public static void sendLocationMSG( String Msg){ if(mRuntime.getUseQueue()){ - ServiceUtil.offerQueue(protocolAPIHelper.genStringMessage("queue",Msg)); + if(!ServiceUtil.offerQueue(protocolAPIHelper.genStringMessage("queue",Msg))) { + ICLogger.i(" MessageQueue 已满,数据将被丢弃," + Msg); + if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(), "APILog", " queueFullskip " + Msg); + + } triggerSendThread(); + }else { if (checkNetwork()) { ICLogger.i(" first send " + Msg); diff --git a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java index 8df80066..7c7e1e36 100644 --- a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java +++ b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java @@ -253,16 +253,17 @@ public class KeepAlive extends AbstractConnectionService { //心跳开始发送的时候,先重置response检测标志 is_heartBeat_send_success=false; //发送心跳包 - Observable.timer(5500L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + Observable.timer(3500L, TimeUnit.MILLISECONDS).subscribe(new Action1() { public void call(Long param1Long) { //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。 mRuntime.setServerProtocolConnected(false); connection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.AP03(paramRuntime))); //发送完心跳后,开始检查服务器响应 - startResponseCheckTimer(); + startResponseCheckTimer(); } }); + isConnected = true; this.firstReConnected = true; this.idleTimeMillis = SystemClock.elapsedRealtime(); diff --git a/app/src/main/java/com/enqualcomm/support/utils/ServiceUtil.java b/app/src/main/java/com/enqualcomm/support/utils/ServiceUtil.java index 061b2193..cad93b00 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ServiceUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ServiceUtil.java @@ -10,21 +10,23 @@ import java.util.concurrent.LinkedBlockingDeque; public class ServiceUtil { - public static void offerQueue(StringMessage paramStringMessage) { - offerQueue(paramStringMessage, false); + public static boolean offerQueue(StringMessage paramStringMessage) { + return offerQueue(paramStringMessage, false); } - public static void offerQueue(StringMessage paramStringMessage, boolean paramBoolean) { + public static boolean offerQueue(StringMessage paramStringMessage, boolean paramBoolean) { if (paramBoolean) { if (!Deliver.queue.offerFirst(paramStringMessage)) { - Deliver.saveQueue(); - Deliver.queue.offerFirst(paramStringMessage); - return; +// Deliver.saveQueue(); +// Deliver.queue.offerFirst(paramStringMessage); + return false; } } else if (!Deliver.queue.offerLast(paramStringMessage)) { - Deliver.saveQueue(); - Deliver.queue.offerLast(paramStringMessage); - } +// Deliver.saveQueue(); +// Deliver.queue.offerLast(paramStringMessage); + return false; + } + return true; } diff --git a/app/version_code.properties b/app/version_code.properties index d458487d..05c27cbf 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Thu Mar 05 13:22:46 CST 2020 -VERSION_CODE=369 +#Thu Mar 05 19:33:06 CST 2020 +VERSION_CODE=370