Open CallBackMe opened 4 years ago
异常类型:热修复完成,执行速度度变慢
手机型号:小米6
手机系统版本:如:Android 8.0
Robust版本:0.4.99
Gradle版本:3.4.1
系统:mac
现在app有数据导入的操作,出现问题。 没有打补丁包之前需要5秒左右能够执行完成, 打了补丁之后需要29秒左右完成导入。
现在测试热修复后,导致数据库执行变慢了。
以下是执行函数:
private static final int MAX_COUNT_6 = 200; /** * eg: replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y'); * 插入数据合成组装后,再插入数据 * @param table 表名 * @param list 需要修改的内容 * @return 是否成功 */ public boolean repaceResSynthetic(String table, String[][] list) { boolean isSuccess = false; try { StringBuilder mSqlBuffer = new StringBuilder(); //添加表名 mSqlBuffer.append("REPLACE INTO "); mSqlBuffer.append(table); //添加key for (int k = 0; k < list[0].length; k++) { if(k == 0){ mSqlBuffer.append("("); } //key mSqlBuffer.append(list[0][k]); if(k == (list[0].length-1)){ mSqlBuffer.append(")"); }else{ mSqlBuffer.append(","); } } //添加values mSqlBuffer.append("values"); //表名参数字符串 String baseSql = mSqlBuffer.toString(); Log.e("xxx"," +++++++++++++++++ repaceResSynthetic baseSql = " + baseSql); //添加values List<String> sqlList = new ArrayList<>(); StringBuffer valuesBuffer = new StringBuffer(); valuesBuffer.append(baseSql); for (int i = 1; i < list.length; i++) { for (int j = 0; j < list[0].length; j++) { if(j == 0){ valuesBuffer.append("("); } //value String value = list[i][j]; if(TextUtils.isEmpty(value)){ valuesBuffer.append("\"\""); }else { valuesBuffer.append("\"" + value + "\""); } if(j == (list[0].length-1)){ valuesBuffer.append(")"); }else{ valuesBuffer.append(","); } } if(i%MAX_COUNT_6 == 0){ String sqlString = valuesBuffer.toString(); sqlList.add(sqlString); if(i < (list.length-1)){ valuesBuffer = new StringBuffer(); valuesBuffer.append(baseSql); } }else { if(i < (list.length-1)){ valuesBuffer.append(","); } } } String sqlString = valuesBuffer.toString(); sqlList.add(sqlString); SqlRequest[] sqlRequests = new SqlRequest[sqlList.size()]; for (int i = 0; i < sqlList.size(); i++) { sqlRequests[i] = new SqlRequest(sqlList.get(i), null); } isSuccess = opration.execSqls(sqlRequests); Log.e("xxx"," +++++++++++++++++ repaceResSynthetic isSuccess = " + isSuccess); } catch (Exception e) { e.printStackTrace(); } return isSuccess; }
进一步确定,拼接sql的2个for循环耗时比较长 !当然后执行sql也会比没有修复之前慢一点。Robust会影响执行速度吗 ?
可能是这个函数体被挪到了一个单独的补丁dex里面,相比于原始apk的dex,可能是新补丁dex的加载速度和反射指令导致的比原始dex的执行慢
异常类型:热修复完成,执行速度度变慢
手机型号:小米6
手机系统版本:如:Android 8.0
Robust版本:0.4.99
Gradle版本:3.4.1
系统:mac
现在app有数据导入的操作,出现问题。 没有打补丁包之前需要5秒左右能够执行完成, 打了补丁之后需要29秒左右完成导入。
现在测试热修复后,导致数据库执行变慢了。
以下是执行函数: