Middle
Ինչպե՞ս կարելի է ստանալ հաղորդագրություններ հիմնական հոսքում Handler և Looper- ի միջոցով։
sobes.tech AI
Պատասխան AI-ից
- Ստեղծել
Handler: Կապեք այնLooper-ի հետ հիմնական հոսքի։ - Ուղարկել
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)տեղադրում էRunnable-ըLooper-ի հաղորդագրությունների հերթում և 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 մեթոդը հիմնական հոսքում։