sensorsdata / sa-sdk-android

神策数据官方 Android 埋点 SDK,是一款轻量级用于 Android 端的数据采集埋点 SDK,包含代码埋点、全埋点、点击图和可视化全埋点功能。全埋点通过配合神策官方 Android 埋点插件来实现,神策数据官方 Android 埋点插件使用字节码插桩(ASM)的技术实现 Android 端的全埋点(无埋点、无码埋点、无痕埋点、自动埋点)。
http://opensource.sensorsdata.cn
Other
1.31k stars 434 forks source link

SnapCache 类中,存在直接的字符串拼接,由于外部是多个 view node,相处于循环中,会导致大量的 StringBuilder 构建,导致严重的内存抖动 #128

Closed baiyanwu closed 1 year ago

baiyanwu commented 1 year ago

举例如下

private final LruCache<String, String> mLruCanonicalName = new LruCache<>(64); 

public String getCanonicalName(Class<?> cls) {
        if (cls == null) {
            return null;
        }
        String canonicalName = mLruCanonicalName.get(cls.hashCode() + "");// 此处无需转成字符串,直接用 int 即可
        if (canonicalName == null) {
            canonicalName = cls.getCanonicalName();
            if (TextUtils.isEmpty(canonicalName)) {
                canonicalName = "Anonymous";
            }
            mLruCanonicalName.put(cls.hashCode() + "", canonicalName);
        }

        return canonicalName;
    }

建议将 private final LruCache<String, String> mLruCanonicalName = new LruCache<>(64); 改为private final LruCache<Integer, String> mLruCanonicalName = new LruCache<>(64);,同时相关方法,去掉 + ""