首页 > 解决方案 > SpannableString 中的内存泄漏,取决于我放置 ClickableSpan 的位置

问题描述

所以,....

我有这个代码(onStart):

ss = new SpannableString(getString(R.string.legal_user_acceptance_disclaimer));
ss.setSpan(clickableSpanTermsOfUse, 32, 44, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

这泄漏了父级Activity-(这些行在)。

如果我只改变数字:

ss.setSpan(clickableSpanTermsOfUse, 49, 63, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

泄漏消失。

clickableSpanTermsOfUsememory leak与普通相同ClickableSpan):

clickableSpanTermsOfUse = new NoRefCopySpan() {
        @Override
        public void onClick(View textView) {
            startActivity(new Intent(ChooseLoginRegistrationActivity.this, PrivacyStatement.class));//, TermsOfUse.class));
        }

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

public class NoRefCopySpan extends ClickableSpan implements NoCopySpan {
    @Override
    public void onClick(@NonNull View widget) { }

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

}

我尝试了很多,使用SpannableStringBuilder而不是SpannableString,将其他地方连接到lifecycle,手动将所有值设置为null,唯一不同的是,我把ClickableSpan.

这里发生了什么,我怎样才能摆脱内存泄漏?

标签: androidmemorymemory-leaksspannablestring

解决方案


推荐阅读