问题现象
Activity销毁后仍被内部类(如Handler、Runnable)隐式持有,导致无法回收,频繁触发GC,引发OOM。
解决方案
-
使用静态内部类 + WeakReference
class MyActivity : AppCompatActivity() { private class SafeHandler(activity: MyActivity) : Handler(Looper.getMainLooper()) { private val weakActivity = WeakReference(activity) override fun handleMessage(msg: Message) { weakActivity.get()?.run { updateUI() } } } private val handler = SafeHandler(this) }
-
借助Lifecycle-aware组件
-
lifecycle.addObserver(object : DefaultLifecycleObserver { override fun onDestroy(owner: LifecycleOwner) { handler.removeCallbacksAndMessages(null) } })