Ich möchte einen Espresso-Matcher schreiben, der verifiziert, dass ein "ImageView" eine bestimmte Bitmap hat. Da die App Bilder über Glide lädt, dachte ich, dass ich das gleiche auf der Testseite tun muss, um das Beschneiden / Zentrieren zu berücksichtigen, bevor ich die erwarteten und tatsächlichen Bitmaps vergleichen kann.
Hier ist, was ich bis jetzt gefunden habe:
%Vor%Das Problem hier ist natürlich, dass ich einen Deadlock habe. Ich bin auf dem Hauptthread (der Matcher wird auf dem Hauptthread IIRC ausgeführt) und Glide möchte einen Backend-Thread, um die Bitmap zu laden und kehrt dann zum Hauptthread (in 'onResourceReady') zurück. Also muss ich von außen auf das Ergebnis warten, das auf der Innenseite steht, während der Hauptthread läuft.
Ich (erfolglos) habe versucht, den aktuellen Looper über Looper.loop()
in // ???
weiterzuentwickeln und habe auch die normale Lock / Wait-Methode versucht, aber nichts hat funktioniert. Ich habe keine Ideen mehr ...
Für solche Fälle verwende ich ein einfaches sleep
, es ist nicht die beste Option, aber es funktioniert für mich.
Eine Möglichkeit, um Ihre Vergleichslogik in onResourceReady zu behalten, Und dann, wenn Sie irgendeinen Eventbus verwenden, dann lösen Sie das Ereignis mit dem Ergebnis aus und setzen Sie die UI-Logik in die Methode, die dieses Event abonniert. Wenn Sie keinen Event-Bus verwenden, senden Sie LocalBroadcastManager an das Ergebnis.
Zum Beispiel:
%Vor%Tags und Links android multithreading android-espresso android-glide