private val handler : Handler = object : Handler() {
override fun handleMessage(msg: Message) {
}
}
上面这种写法编译器会警告:‘constructor Handler()’ is deprecated. Deprecated in Java
无警告写法 private val handler : Handler = object : Handler(Looper.myLooper()!!) {
override fun handleMessage(msg: Message) {
}
}
注意上面要加!!这两个感叹号,代表是只有不为空时才执行,不加会报错:Type mismatch: inferred type is Looper? but Looper was expected
无泄露最终版本private class UIHandler(val mWeakRef: WeakReference) : Handler(Looper.myLooper()!!) { override fun handleMessage(msg: Message) { super.handleMessage(msg) // 注意这里加个.run,代表是跑在this中的,方便直接访问外部类,当然也可以不用run, // 但是所有访问外部类的地方都要用mWeakRef.get()->的形式,写起来麻烦点 mWeakRef.get()?.run { when (msg.what) { // xxxxxx } } } } private val handler = UIHandler(WeakReference(this))
作者:帅得不敢出门



