kotlin中Handler的定义以及使用

Handler在kotlin中定义以及使用方法:
class MainActivity : AppCompatActivity() {

    // 静态常量
    companion object {
        const val INDEX_KEY = "index"
        const val NAME_KEY = "NAME"
        const val FLAG_KEY = "FLAG"
        const val MESSAGE_WHAT = 1001
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 发送一条携带Bundle对象的消息
        val mMessage = obtain()
        val mBundle = Bundle()
        mBundle.putInt(MainActivity.INDEX_KEY, 100)
        mBundle.putString(MainActivity.NAME_KEY, "秦川小将")
        mBundle.putBoolean(MainActivity.FLAG_KEY, true)
        mMessage.data = mBundle
        mHandler.sendMessage(mMessage)
        // 使用sendEmptyMessageDelayed延时1s后发送一条消息
        mHandler.sendEmptyMessageDelayed(MainActivity.MESSAGE_WHAT, 1000)
    }

    // 创建一个Handler
    private val mHandler: Handler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            when (msg?.what) {
                MainActivity.MESSAGE_WHAT -> {
                    Log.e("Kotlin", "接收通过sendEmptyMessageDelayed()发送过来的消息")
                }
                // 这里的else相当于Java中switch的default;
                else -> {
                    val mBundle = msg?.data
                    Log.e("接收到的数据", mBundle?.getInt(MainActivity.INDEX_KEY).toString())
                    Log.e("接收到的数据", mBundle?.getString(MainActivity.NAME_KEY))
                    Log.e("接收到的数据", mBundle?.getBoolean(MainActivity.FLAG_KEY).toString())
                }
            }
        }
    }
}

打印输出:

02-26 03:41:57.626 4591-4591/? E/接收到的数据: 100
02-26 03:41:57.626 4591-4591/? E/接收到的数据: 秦川小将
02-26 03:41:57.626 4591-4591/? E/接收到的数据: true

02-26 03:41:58.613 4591-4591/? E/Kotlin: 接收通过sendEmptyMessageDelayed()发送过来的消息

注意:
  • 在kotlin中定义静态常量是通过 companion object 关键字来定义的。
  • Handler中存在多种类型的消息时,在Java中使用 switch 语句来判断,而kotlin中使用 when 语句替代了,用法如上面案例中的用法,when 语句中的 else 作用和Java中 switchdefault 作用是一样的。
  • 在kotlin中定义Handler时必须要写 object : Handler 否则无法重写 handleMessage(Message msg) 方法
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙同學

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值