Unterschied zwischen der runOnUiThread () - Methode und der @UiThreadTest-Annotation

8

Kann jemand als Titel den Unterschied zwischen der runOnUiThread () -Methode und der @UiThreadTest-Annotation erklären? Ich habe das Android Test-Tutorial ( Ссылка ) durchgelesen, das beides verwendet. Es heißt:

  

Code in einer Testanwendung, die mit einer Ansicht der zu testenden Anwendung interagiert, muss im Thread der Hauptanwendung ausgeführt werden, der auch als UI-Thread bezeichnet wird. Verwenden Sie dazu die Activity.runOnUiThread () -Methode

und:

  

Die Annotation @UiThreadTest weist Android an, diese Methode so zu erstellen, dass sie im UI-Thread ausgeführt wird. Dadurch kann die Methode den Status des Drehfeld-Widget in der zu testenden Anwendung ändern.

Für die runOnUi () -Methode ist der betreffende Code

%Vor%

und für die Annotation @UiThreadTest:

%Vor%

Sie scheinen austauschbar zu sein, in dem Sinne, dass ich die Anmerkung aus dem annotierten Test entfernen und ihren Inhalt in eine runOnUiThread () -Methode einschließen kann, die übergeben wird. Ebenso kann ich die runOnUiThread () -Methode aus dem anderen Test entfernen und die @UiThreadTest-Annotation hinzufügen, und sie wird übergeben.

Also, was ist der Unterschied?

Zusätzlich enthält das Lernprogramm einen weiteren Test:

%Vor%

Dieser Test interagiert auch mit der Aktivität, erfordert jedoch weder die Annotation @UiThreadTest noch eine runOnUiThread () -Methode. Warum ist das?

    
barry 17.10.2013, 12:57
quelle

1 Antwort

6

Der Unterschied liegt in Semantik und Nebenwirkungen.

Erstens bewirkt das Vorhandensein von @UiThreadTest , dass die Aktivität erstellt wird, wenn sie nicht bereits durch Aufrufen von getActivity() .

Dann in InstrumentatinTestCase verwendet es getInstrumentation().runOnMainSync() , um den vollständigen Test auszuführen.

Der Unterschied zwischen getInstrumentation().runOnMainSync() und %Co_de% ist, dass ersterer darauf wartet, dass der Anruf beendet wird (benötigt, wenn ein vollständiger Test ausgeführt wird oder, wisst ihr, Dinge in einem Test aufrufend), während letzterer nicht.

Anders als das, posten sie auf verschiedene Activity.runOnUiThread() s ( Handler verwendet die eine von runOnMainSync , während die ActivityThread -Instanz eine eigene hat), aber das ist irrelevant, da sie auf derselben Ebene eingeplant werden Activity .

    
Delyan 17.10.2013 13:24
quelle

Tags und Links