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/接收到的数据: true02-26 03:41:58.613 4591-4591/? E/Kotlin: 接收通过sendEmptyMessageDelayed()发送过来的消息
注意:
- 在kotlin中定义静态常量是通过 companion object 关键字来定义的。
- Handler中存在多种类型的消息时,在Java中使用 switch 语句来判断,而kotlin中使用 when 语句替代了,用法如上面案例中的用法,when 语句中的 else 作用和Java中 switch 的 default 作用是一样的。
- 在kotlin中定义Handler时必须要写 object : Handler 否则无法重写 handleMessage(Message msg) 方法