关于SpannableStringBuilder使用ClickableSpan导致内存泄漏

在对text文字部分设置点击事件就要用到ClickableSpan,但是这个会导致内存泄漏,在回调onClick方法中设置跳转代码会导致我们的activity无法被释放。

在activity的onDestroy方法中即使使用SpannableStringBuilder的removespan和clear方法都没用。

可以使用自定义的ClickableSpan然后实现LifecycleObserver监听生命周期

复制代码
class CustomClickableSpan(var context: Activity?) : ClickableSpan(),
    LifecycleObserver {
    override fun onClick(widget: View) {

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy() {
    // 在销毁的时候将context置为null 
    // 在activity中别忘了注册addObserver
        context = null
    }


}
相关推荐
可乐鸡翅yeah_12 分钟前
HLS CORS 跨域问题完整排查实战,解决 M3U8 与 TS 分片跨域报错
android·ios·音视频·m3u8·音视频在线播放
邪修king1 小时前
Linux系统篇(二十三) 基础 IO:从“文件”到“文件描述符”,彻底理解重定向
android·java·linux
灵境(虚幻知音)1 小时前
效能评估指标体系构建:方法、流程与模板
android·数据库
光影少年1 小时前
React18 对RN 的影响
android·前端·react.js·ios·前端框架
杉氧2 小时前
丝滑的奥秘:Reanimated 3 动画引擎与手势处理(Gesture Handler)
android·前端·react native
我命由我123452 小时前
Compose Codelab 学习 - Jetpack Compose 中的状态
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
sbjdhjd2 小时前
在 8 字符、字母数字过滤与 PHP 版本差异下复盘临时文件命令执行链 | (8字符绕过)
android·java·开发语言·安全·web安全·数据挖掘·php
小七在进步2 小时前
C++入门(3)
android·java·c++
码农coding2 小时前
android12 SystemUI下拉通知栏的加载流程
android
凡泰AI3 小时前
如何为政务 APP 搭建开放平台,实现多部门、第三方供应商标准化入驻与统一管理
android·大数据·小程序·uni-app·app·政务