Apakah ada cara yang ampuh untuk mendeteksi apakah Thread.currentThread()
thread UI sistem Android ada dalam aplikasi?
Saya ingin memasukkan beberapa pernyataan dalam kode model saya yang menegaskan bahwa hanya satu utas ( misalnya utas ui) yang mengakses negara saya, untuk memastikan bahwa tidak ada jenis sinkronisasi yang diperlukan.
117
Jawaban:
Praktik umum untuk menentukan identitas UI Thread adalah melalui Looper # getMainLooper :
Dari API level 23 dan lebih tinggi, ada pendekatan yang sedikit lebih mudah dibaca menggunakan metode helper baru isCurrentThread di looper utama:
sumber
Saya pikir cara terbaik adalah ini:
sumber
equals
karena kami hanya membandingkan referensi, dan yang terpenting, keduanya statis.Pada API level 23
Looper
memiliki metode pembantu yang bagusisCurrentThread
. Anda bisa mendapatkanmainLooper
dan melihat apakah itu yang untuk utas saat ini dengan cara ini:Ini praktis sama dengan:
tapi bisa sedikit lebih mudah dibaca dan diingat.
sumber
Tapi itu membutuhkan API level 23
sumber
Selain memeriksa looper , jika Anda pernah mencoba untuk logout id thread
onCreate()
, Anda dapat menemukan ID thread UI (utas utama) selalu sama dengan 1. Oleh karena itusumber
Tidak bisakah Anda menggunakan
runOnUiThread
metode diActivity
kelas? Lihat ..http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
sumber