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για εκτέλεση.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 στο κύριο νήμα.