Dalam perkhidmatan Android, multithreading selalunya digunakan untuk melaksanakan tugas intensif sumber tanpa menyekat urutan UI utama. Walau bagaimanapun, situasi timbul apabila urutan latar belakang perlu berinteraksi dengan utas utama, seperti menyiarkan tugas ke baris gilir mesejnya.
Untuk menangani perkara ini, rangka kerja Android menyediakan mekanisme untuk komunikasi merentas utas menggunakan Pengendali. Pengendali ialah objek yang boleh memproses mesej pada Looper tertentu. Dengan menggunakan Pengendali yang dikaitkan dengan Looper utas utama, tugasan boleh diposkan ke baris gilir mesej utas utama daripada utas lain.
Penyelesaian 1: Menggunakan Objek Konteks
Jika benang latar belakang mempunyai rujukan kepada objek Konteks (sama ada konteks Aplikasi atau konteks Perkhidmatan), anda boleh mengakses Pengendali Looper utama sebagai berikut:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(context.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
Penyelesaian 2: Tanpa Objek Konteks
Jika urutan latar belakang tidak mempunyai akses kepada objek Konteks, anda boleh menggunakan pendekatan yang lebih langsung seperti yang dicadangkan oleh @dzeikei:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(Looper.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Komunikasi Cross-Thread dalam Perkhidmatan Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!