创建一个 Looper 线程
方法一:创建一个 Thread 线程
-
MainActivity.kt
内的onCreate()
最后添加:val looperThread = LooperThread()
looperThread.start()
thread {
Thread.sleep(3000)
val message = Message()
message.what = LooperThread.EVENT_INIT
message.target = looperThread.getHandler()
Log.d(
"MainActivity",
"send message ${message.what} at thread id ${Thread.currentThread().id}"
)
message.sendToTarget()
} -
新建
LooperThread.kt
:package com.example.myapplication
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.util.Log
class LooperThread : Thread() {
private var handler: Handler? = null
private var isInitialized = false
fun getHandler(): Handler? {
return handler
}
override fun run() {
Looper.prepare()
handler = object : Handler(Looper.myLooper()!!) {
override fun handleMessage(msg: Message) {
Log.d(
TAG,
"Received message ${msg.what} at thread id ${
currentThread().id
}"
)
when (msg.what) {
EVENT_INIT -> {
performInit()
}
else -> println("Unknown Event: " + msg.what)
}
}
}
isInitialized = true
Looper.loop()
}
fun isInitialized(): Boolean {
return isInitialized
}
private fun performInit() {
Log.d(TAG, "performInit() called")
sleep(1000);
}
companion object {
const val EVENT_INIT: Int = 1
private const val TAG = "LooperThread"
}
}
方法二:创建一个 HandlerThread 线程
-
MainActivity.kt
内的onCreate()
最后添加:val myHandlerThread = MyHandlerThread("MyHandlerThreadA")
myHandlerThread.start()
thread {
Thread.sleep(3000)
val message = Message()
message.what = MyHandlerThread.EVENT_INIT
message.target = myHandlerThread.handler
Log.d(
"MainActivity",
"send message ${message.what} at thread id ${Thread.currentThread().id}"
)
message.sendToTarget()
} -
新建
MyHandlerThread.kt
:package com.example.myapplication
import android.os.Handler
import android.os.HandlerThread
import android.os.Looper
import android.os.Message
import android.util.Log
public class MyHandlerThread(name: String?) : HandlerThread(name) {
lateinit var handler: Handler;
override fun onLooperPrepared() {
super.onLooperPrepared()
handler = object : Handler(Looper.myLooper()!!) {
override fun handleMessage(msg: Message) {
Log.d(
TAG,
"Received message ${msg.what} at thread id ${
currentThread().id
}"
)
when (msg.what) {
EVENT_INIT -> performInit()
else -> println("Unknown Event: " + msg.what)
}
}
}
}
private fun performInit() {
Log.d(TAG, "performInit() called")
sleep(1000);
}
companion object {
const val EVENT_INIT: Int = 1
private const val TAG = "MyHandlerThread"
}
}