频繁new StringBuild() 可能造成内存泄漏
private static void log(@NonNull HiLogConfig config, @HiLogType.TYPE int type, @NonNull String tag, Object... contents) { if (!config.enable()) { return; } StringBuilder sb = new StringBuilder(); String body = parseBody(contents, null); sb.append(body); Log.println(type, tag, body); } private static String parseBody(@NonNull Object[] contents, @NonNull HiLogConfig config) { StringBuilder sb = new StringBuilder(); for (Object o : contents) { sb.append(o.toString()).append(";"); } if (sb.length() > 0) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); }
从HiLog这个看到log()这个方法 new StringBuilder(),然后 parseBody 里面又 new StringBuilder(),我这里试着连续打印1W次HiLog.a(""),可以通过profiler明显看到内存和cpu占用非常高,那么对于一些需求场景,需要一直打印日志的,就很容易造成ANR或者内存泄漏的问题,老师们优化下这个问题憋
88
收起
正在回答 回答被采纳积分+1
1回答
CrazyCodeBoy
2020-06-02 10:11:56
你的1w次打印是是通过for循环一次创建的吗,对于这种高频的使用场景GC是没那么及时的,可以将对stringbuilder的使用设计成单例,减少频繁的创建。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星