跳到主要内容

创建一个 Looper 线程

方法一:创建一个 Thread 线程

  1. 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()
    }
  2. 新建 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 线程

  1. 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()
    }
  2. 新建 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"
    }
    }