Handler的封装(添加软引用)

Handler的封装

封装handler:

/**
 * 软引用的Handler
 */
class MyHandler(mActivity: Activity, mListen: (Message?) -> Unit) : Handler() {
    private var mWeakReference: WeakReference<Activity> = WeakReference(mActivity)//添加弱引用
    private var mListen=mListen
    override fun handleMessage(msg: Message) {
        super.handleMessage(msg)
        if (mWeakReference.get() != null) {
            mListen(msg)
        }
    }
}

MainActivity:

class MainActivity : AppCompatActivity() {
    var myHandler = MyHandler(this) {
        Log.d("WY+", "it的数据为:$it")
        when (it!!.what) {
            1 -> {
                Log.d("WY+", "延时执行了")
            }
            2 -> {
                Log.d("WY+", "字符串数据为:" + it.obj)
            }
            3 -> {
                Log.d("WY+", "更新UI:" + it.obj)
                tv_1.text = it.obj.toString()//此处不用使用runOnUiThread

            }

        }
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //第一种(延时)
        myHandler.sendEmptyMessageDelayed(1, 5000)

        //第二种(发送数据)
        var message: Message = myHandler.obtainMessage()
        message.what = 2
        message.obj = "字符串数据666"
        myHandler.sendMessage(message)

        //第3种(发送数据并且更新UI)
        var message1: Message = myHandler.obtainMessage()
        message1.what = 3
        message1.obj = "更新UI数据:000"
        myHandler.sendMessage(message1)

    }
}

避免oom的方法有两种:
1、弱引用(如上)
2、在ondestroy里面调用handler.removeCallbacksAndMessages(null);

demo的下载地址为:
https://download.csdn.net/download/wy313622821/12265063
结束!!!!

发布了26 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/105052512