AndroidUtilCode icon indicating copy to clipboard operation
AndroidUtilCode copied to clipboard

SpanUtils.setClickSpan存在内存泄漏

Open ForLovelj opened this issue 3 years ago • 3 comments

描述 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;
    }

ForLovelj avatar Dec 11 '21 06:12 ForLovelj

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

tanranran avatar Dec 13 '21 06:12 tanranran

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

ForLovelj avatar Dec 13 '21 06:12 ForLovelj

有解决方案吗

tianshaokai avatar Dec 14 '22 08:12 tianshaokai