采用static + 弱引用 + onDestroy中removeCallbacksAndMessages置空,避免内存泄漏。
class HandlerDemoActivity : AppCompatActivity() {
companion object {
const val MSG_WHAT = 1
}
private val outPut = "我是Message"
private val weakReferenceHandler by lazy { WeakReferenceHandler(this) }
class WeakReferenceHandler(obj: HandlerDemoActivity) : Handler(Looper.getMainLooper()) {
private val ref: WeakReference<HandlerDemoActivity> = WeakReference(obj)
override fun handleMessage(msg: Message) {
ref.get()?.run {
when (msg.what) {
MSG_WHAT -> println(outPut)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
weakReferenceHandler.sendEmptyMessageDelayed(MSG_WHAT, 3000)
}
override fun onDestroy() {
weakReferenceHandler.removeCallbacksAndMessages(null)
super.onDestroy()
}
}