AndroidUtilCode SpanUtils.setClickSpan存在内存泄漏

wdebmtf2  于 2022-10-21  发布在  Android
关注(0)|答案(2)|浏览(323)

描述 Bug

SpanUtils.setClickSpan存在内存泄漏

相关代码

public SpanUtils setClickSpan(@ColorInt final int color,
                                  final boolean underlineText,
                                  final View.OnClickListener listener) {
        setMovementMethodIfNeed();
        this.clickSpan = new ClickableSpan() {

            @Override
            public void updateDrawState(@NonNull TextPaint paint) {
                paint.setColor(color);
                paint.setUnderlineText(underlineText);
            }

            @Override
            public void onClick(@NonNull View widget) {
                if (listener != null) {
                    listener.onClick(widget);
                }
            }
        };
        return this;
    }

修复代码 扩展 NoCopySpan

public static class FixSpan  extends ClickableSpan implements NoCopySpan {

        @Override
        public void onClick(@NonNull View widget) {

        }

        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
        }

    }

public SpanUtils setClickSpan(@ColorInt final int color,
                                  final boolean underlineText,
                                  final View.OnClickListener listener) {
        setMovementMethodIfNeed();
        this.clickSpan = new FixSpan() {

            @Override
            public void updateDrawState(@NonNull TextPaint paint) {
                paint.setColor(color);
                paint.setUnderlineText(underlineText);
            }

            @Override
            public void onClick(@NonNull View widget) {
                if (listener != null) {
                    listener.onClick(widget);
                }
            }
        };
        return this;
    }
qrjkbowd

qrjkbowd1#

@ForLovelj NoCopySpan 这个解决方案会导致很多低端手机奔溃,大佬可以查一下

vtwuwzda

vtwuwzda2#

@tanranran 对的,实现NoCopyScan后触发无障碍服务时内部会出现崩溃

相关问题