Temel olarak 250K JNI'nin etrafında bir sarıcı olan bir uygulama yazıyorum. JNI (bir oyun motoru), handle_penUp (int x, int y) gibi API'lere sahiptir. Bazen, kullanıcının handle_penUp() içinden (geri aramalar Java koduyla) sorgulanması gerekir, böylece sorguyu uygulamak için kullandığım iletişim kutusu engellenmelidir.İletişim kutusunun JNI kodu içinden engellenmesi
Ana yürütme işleminin engellenemeyeceğini biliyorum. Bu yüzden, engellemeye ihtiyaç duyabilecek geri aramalarla sonuçlanabilecek tüm JNI çağrılarını yapan ikinci bir iş parçacığı ürettim. Bu ikinci iş parçacığı içinde, bir engelleme iletişim kutusunu kapatmam gerektiğinde, startActivityForResult() öğesini çağırıp bir semaforda() ediniyorum. OnActivityResult(), ana iş parçacığına çağrıldığında, aynı semaforda release() işlevini çağırır. Benim sorgu ancak ben mevcut Etkinlik içinden showDialog() isterseniz, yeni Aktivite olarak uygulanması halinde
Bu çalışır. Günlük mesajları, iş parçamın bir Looper'a ihtiyacı olduğunu söylüyor. Bir tane ekliyorum - çalışıp çalışmadığına dair bilgi ekleyeceğim - ama sanki yanlış yoldan aşağı iniyorum sanki. (Diğer her platform'un vardır ve bu yüzden taşınmış kod genellikle bu şekilde çalışacaktır. Çünkü sadece eğer faydalıdır)
io engellenmeyen muhtemelen vs engelleme olarak bloke (çağrı kadar dönmez
Jason yardımcı olur umarım İstenilen girdiyi aldı veya başarısız oldu, hemen geri dönüyor ve zaten bir tamponda bulunan herhangi bir girdiyi rapor ediyor) –