关于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
    }


}
相关推荐
157092511341 小时前
ViewBinding与DataBinding区别与选型
android
小乖写代码3 小时前
49款开源Android小游戏
android·游戏
三少爷的鞋3 小时前
小团队的最优解:单 Module + 包内 Clean 架构
android
爱和冰阔落3 小时前
【Linux】两个毫无关系的进程怎么通信?命名管道 FIFO 从原理到 Server/Client 实战
android·linux·数据库·c++·vim
Android-Flutter3 小时前
kotlin 协程 - 核心概念
android·kotlin
年小个大13 小时前
受 go-zero 启发,我给 Flutter 写了一套 CLI 脚手架
android·flutter·架构
Android-Flutter14 小时前
为什么说ActivityThread是主线程?
android·kotlin
余额瞒着我当琳16 小时前
C++模板初阶与STL初探
android·java·c++
知行合一。。。18 小时前
DeepAgents--01--Agent和OpenClaw的相关概念
android·数据库
汪海游龙20 小时前
告别 Play Console 手动上传:从模拟器截图到自动发版的完整流水线
android·ci/cd·github