1. Dalam proses memuatkan dan melukis View, terdapat kelas koreografer, mKoreografer.
mTraversalBarrier = mHandler.getLooper().postSyncBarrier();
Masukkan mesej penghalang penyegerakan ke dalam mesej MessageQueue, msg.target==null, nilai pulangan mTraversalBarrier ialah nilai token int.
1 2 3 4 5 6 7 8 9 |
|
Kaedah mChoreographer.postCallback() akan melaksanakan kod dalam mTraversalRunnable.
mHandler.getLooper().removeSyncBarrier(mTraversalBarrier);
Ini akan mengalih keluar mesej halangan penyegerakan dalam MessageQueue berdasarkan nilai token yang dijana di atas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Lihat baris kod ini mHandler.getLooper().postSyncBarrier() untuk melihat cara sistem mengendalikannya.
Mendapat Mesej tanpa pengendali.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Biasanya kami menghantar mesej melalui pengendali, dan pengendali tidak dibenarkan kosong.
1 2 3 4 5 6 |
|
Jadi mengapa sistem menghantar mesej dengan pengendali kosong?
Mari kita lihat dahulu apa yang dilakukan oleh mChoreographer selepas menghantar mesej halangan penyegerakan?
Satu lagi mesej tak segerak telah dihantar: msg.setAsynchronous(true).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Seterusnya, mari kita lihat cara MessageQueue mengalih keluar mesej dan cara ia mengendalikan mesej halangan penyegerakan ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
Apabila membatalkan, mula-mula tentukan sama ada msg.target adalah batal, dan kemudian pergi melalui gelung sementara untuk mencari mesej yang msg.isAsynchronous() == benar. Itulah mesej tak segerak yang dihantar di atas. Biasanya mesej yang kami hantar ialah mesej segerak, dan msg.setAsynchronous(true) tidak akan ditetapkan.
Tujuan sistem adalah untuk memproses mesej tak segerak ini terlebih dahulu. Semua mesej penyegerakan akan diletakkan di belakang, sama seperti penghalang, jadi operasi sedemikian dipanggil halangan penyegerakan, dan pemprosesan mesej halangan penyegerakan mempunyai keutamaan yang lebih tinggi.
Oleh kerana mChoreographer kelas koreograf bertanggungjawab untuk pemaparan skrin, ia perlu memproses isyarat dari lapisan bawah tepat pada masanya untuk memastikan kekerapan penyegaran antara muka.
Atas ialah kandungan terperinci Analisis kod contoh halangan penyegerakan Java Handler. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!