描述 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;
}
2条答案
按热度按时间qrjkbowd1#
@ForLovelj NoCopySpan 这个解决方案会导致很多低端手机奔溃,大佬可以查一下
vtwuwzda2#
@tanranran 对的,实现NoCopyScan后触发无障碍服务时内部会出现崩溃