Sobes.tech
Middle

Ինչպե՞ս կարելի է ստանալ հաղորդագրություններ հիմնական հոսքում Handler և Looper- ի միջոցով։

sobes.tech AI

Պատասխան AI-ից

  1. Ստեղծել Handler: Կապեք այն Looper-ի հետ հիմնական հոսքի։
  2. Ուղարկել Runnable կամ Message: Handler-ի միջոցով՝ կատարման համար կապված հոսքում (այստեղ՝ հիմնականում)։
// Հիմնական հոսքում
val mainHandler = Handler(Looper.getMainLooper())

// Ստեղծել և ուղարկել Runnable
mainHandler.post {
    // Կոդ, որը կատարվում է հիմնական հոսքում
}

// Ստեղծել և ուղարկել Message
val message = Message.obtain().apply {
    what = 1 // Ընտրովի հաղորդագրության նույնականիչ
    obj = "hello" // Ավելորդ տվյալներ
}
mainHandler.sendMessage(message)
  • Looper.getMainLooper() ստանում է Looper-ը, որը կապված է հիմնական հոսքի հետ։
  • Handler(Looper.getMainLooper()) ստեղծում է Handler, որը կվերամշակի ուղարկված հաղորդագրությունները հիմնական հոսքում։
  • post(Runnable) տեղադրում է RunnableLooper-ի հաղորդագրությունների հերթում և executes է այն։
  • sendMessage(Message) ուղարկում է հաղորդագրությունը Looper-ի հաղորդագրությունների հերթին։

Այլընտրանք՝ անանուն Handler դաս handleMessage-ով

Դուք կարող եք վերագրել handleMessage մեթոդը անանուն Handler դասում՝ հաղորդագրությունները մշակելու համար։

// Հիմնական կամ այլ հոսքում, որտեղ անհրաժեշտ է ստեղծել Handler հիմնական հոսքի համար
val myHandler = object : Handler(Looper.getMainLooper()) {
    override fun handleMessage(msg: Message) {
        // Կոդ, որը կատարվում է հիմնական հոսքում հաղորդագրության ստացման ժամանակ
        when (msg.what) {
            1 -> {
                val data = msg.obj as String
                // Տվյալների մշակումը
            }
        }
    }
}

// Ուղարկել հաղորդագրություն այլ հոսքից
Thread {
    val message = Message.obtain().apply {
        what = 1
        obj = "world"
    }
    myHandler.sendMessage(message)
}.start()

Այս դեպքում, հաղորդագրության ստացման ժամանակ, կկոչվի handleMessage մեթոդը հիմնական հոսքում։